问题标签 [system-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4842 浏览

c# - 设计模式以促进这些行为(审计跟踪行为和撤消)

我正在开发一个需要展示这些行为的系统:

  1. 审计追踪
  2. 撤消/恢复到特定版本(此类操作本身将被审核记录)

我在这里看到了一个稍微相似的问题但它只涉及我正在尝试做的部分事情。此外,我想捕获一个对象的整个生命周期(即 CRUD)。

我打算实现的方式如下:

  1. 有一个基于观察者模式的 ChangeManager 类
  2. 从以命令模式“包装”更改的基础对象派生我的对象
  3. 在任何 CRUD 事件上使用命令对象通知 ChangeManager

注意:“更改”命令将包括:

  • 2 元组的(有序)集合,详细说明字段更改(prev,new)
  • 进行更改的用户 ID
  • 更改的时间戳

这只是“我的头上” - 我正在考虑采取的方法可能存在漏洞 - 我会感谢以前实施过这种行为的人的一些帮助,以及一般建议,专业人士和我上面概述的方法的缺点 - 或者可能是更好/替代方法。也将不胜感激一两个片段可以为我指明正确的方向!

我将使用 C# 作为实现语言。

0 投票
2 回答
659 浏览

java - 设计一个基于插件的java应用程序

我正在尝试制作一个基于插件的应用程序,这意味着除了基本框架之外,还应该使用插件样式添加其他功能。

我认为这种系统的主要问题是如何在运行时加载新插件。安装新插件后,我不想重新编译整个项目。就像 Eclipse 一样,新安装插件后,用户只需要重新启动它。所以我的第一个想法是使用java反射在运行时加载类。可能有一些插件配置文件,系统读取它们并通过反射加载插件类。也许我也可以使用 spring 框架,因为它的控制反转正好符合我的要求。

我正在研究的另一个想法是使用 ejb 容器。当插件是 ejbs 时,我可以将它们打包到 jar 中并将它们部署在 ejb 容器中,然后我可以使用 jndi 访问它们。但它仅在插件是 ejbs 时才有效。

无论如何,我是系统设计的菜鸟。所以我发布了这个话题,想听听你的意见。顺便提一句。有没有什么关于系统设计的好书要推荐?

提前非常感谢!

0 投票
0 回答
527 浏览

firmware - 用于在 Atmel UC3 平台上进行固件开发的系统设计文档模板

是否有任何机构拥有或知道任何网站,我可以在其中获得用于 Atmel UC3 平台的固件开发项目的系统设计文档模板?

0 投票
1 回答
406 浏览

wpf - MVVM 应用程序的设计

我在这里非常怀疑我的应用程序的设计.....

这是我的应用程序的图表

我的应用程序图

这是正确的吗 ??o 我需要改变一些东西...

我会详细说明图表....:

公共库:它包含类错误代码、实用程序类等
记录器:记录框架
异常处理:处理异常的框架

视图:包含:用户控件、Windows、弹出窗口等视图的所有不同 XAML

ViewModel :包含不同视图的 ViewModel。

模型:包含不同的层,如......业务层、数据访问层等

实体层:包含实体对象,如员工、公司等...

文件框:它指定从文件/数据库中读取/写入....

0 投票
4 回答
8658 浏览

c++ - Lua vs Embedded Lisp 和潜在的其他候选人。用于基于集合的数据处理

当前选择: lua-jit。令人印象深刻的基准测试,我已经习惯了这种语法。编写高性能 ABI 需要仔细考虑我将如何构建我的 C++。

其他感兴趣的问题

  1. Gambit-C 和 Guile 作为可嵌入语言
  2. Lua 性能提示(可以选择使用禁用的收集器运行,并在处理运行结束时调用收集器始终是一个选项)。

背景

我正在开发一个实时大容量(复杂)事件处理系统。我有一个 DSL,它在源头表示事件结构的模式、存储格式、某些特定于域的构造、触发内部事件(以构建和驱动通用处理),以及对总是发生的某些处理步骤进行编码。

DSL 看起来与 SQL 非常相似,事实上我正在使用 berkeley db(通过 sqlite3 接口)来长期存储事件。这里重要的部分是事件的处理是基于集合完成的,比如 SQL。然而,我得出的结论是,我不应该向 DSL 添加通用处理逻辑,而是嵌入 lua 或 lisp 来处理这个问题。

处理核心是围绕 boost::asio 构建的,它是多线程的,rpc 是通过协议缓冲区完成的,事件使用协议缓冲区 IO 库进行编码——即,事件不是使用协议缓冲区对象构造的,它们只是使用相同的编码/解码库。我将创建一个包含行的数据集对象,这与数据库引擎在内存集中的存储方式非常相似。DSL 中的处理步骤将首先得到处理,然后提交给通用处理逻辑。

无论我使用什么可嵌入脚本环境,我的处理核心中的每个线程都可能需要它自己的嵌入式语言环境(如果你正在做多线程工作,lua 至少需要它)。

问题

目前的选择是在 lisp ECL 和 lua 之间。请记住,性能和吞吐量是一项强大的要求,这意味着非常需要最小化内存分配:

  1. 如果你处于我的位置,你会选择哪种语言?

  2. 有没有我应该考虑的替代方案(不要建议没有可嵌入实现的语言)。也许是 Javascript v8?

  3. lisp 是否更适合域?我不认为 lua 和 lisp 在它们提供的方面有什么不同。叫我出来 :D

  4. 我应该考虑其他任何属性(如下面的属性)吗?

  5. 我断言任何形式的嵌入式数据库 IO(请参阅下面的示例 DSL 了解上下文)都会使脚本语言调用相形见绌,而且选择其中任何一种都不会给整体吞吐量增加太多开销。我在正确的轨道上吗?:D

所需属性

  1. 我想将我的数据集映射到一个 lisp 列表或 lua 表上,并且我想最小化冗余数据副本。例如,如果两个表具有相同的形状,则从一个数据集中将一行添加到另一个应尝试使用引用语义。

  2. 我可以保证在进行 lua/lisp 调用时,作为输入传递的数据集不会改变。如果可能,我希望 lua 和 lisp 强制不更改数据集。

  3. 在嵌入式调用结束后,数据集应该被销毁,创建的任何引用都需要替换为副本(我猜)。

DSL 示例

为了您的观看乐趣,我附上了一个 DSL,这样您就可以了解我想要实现的目标。注意:DSL 不显示通用处理。

该项目是博士研究项目的一个组成部分,并且是/将是免费软件。如果您有兴趣与我合作(或贡献)这个项目,请发表评论:D

0 投票
1 回答
2846 浏览

oop - 停车场,OOP 设计 - 定制设计

我正在研究停车场的例子,并且在我设计时做了一些假设。

在将属性分配给项目/对象时,我有几个问题。

1) 如果parkingSpace不是由系统分配的,即用户刚刚进入Lot,找到一个合适的地方(汽车/自行车/卡车/残疾人)并停放他的汽车。

我认为我不需要 ParkingSpace 对象,但相反,我可以为每个 category_of_parking_space 保留 no_of_free_places 的计数。

由于停车位很大,我们只维护三个变量。

  • no_of_free_slots_Car
  • no_of_free_slots_Bike
  • no_free_slots_Truck
  • no_free_slots_Handicapped

当有车辆进来时,我们只是减少上述值之一(这意味着,在可用的 X 个地方中,用户选择一个并停在那里),当车辆出去时,我们增加相应的值。(简而言之,停车场不是任何人分配的,车辆只是去那里符合条件的地方和公园之一)

2)假设我们有一个全局停车计时器。
--> start_time/end_time 应该是 Vehicle 的属性吗?
或者
--> vehicle_id, start_time, end_time 是 ParkingMeter 的一部分。

3) 假设需要parkingSpace 对象,4_wheeler、2_wheeler、handicapped 应该是一个枚举类型,还是一个单独的类。
如果是枚举,我们可以使用 findEmptySlot(parkingSpace_type);
如果它们完全是单独的类,并且 ParkingLot 有一个方法 findEmptySlot();
我们如何才能获得合适的 Slot?

ParkingMeter 将负责设置车辆的开始、结束时间,对吗?

如果有多个金额,1 小时 - 20 美元、2 小时 - 30 美元、3 小时 - 40 美元、5 小时 - 50 美元,
是否将这些部分包含在 ParkingMeter 类中,或者将它们包含在单独的类“ParkingPrice”中

0 投票
1 回答
462 浏览

architecture - 需要有关库存应用程序设计的指导

目前我正在开发库存管理应用程序(稍后这也可以与会计应用程序集成),我需要您的帮助来决定以下一项重要的系统设计相关决策:

要求:

  1. 工厂有多个会计师事务所(公司),货物从这些会计师事务所进出,但实际上它们在一个工厂内消费,所有生产都作为一个制造单元进行管理。没有基于会计师事务所的实物库存或生产项目的分离。但是再次出售的商品来自不同的会计师事务所。
  2. 库存数据、销售和采购应由公司提供
  3. 没有单独管理与生产相关的记录
  4. 库存和生产数据将在一个应用程序中为所有公司(会计师事务所)统一管理,因此客户可以可靠地跟踪库存/库存项目

现在,我希望您具体提出以下建议:

  1. 你有什么建议,是否将所有公司明智的数据保存为彼此不同的单独数据库
  2. 或者将它们存储在具有公司单独标识符的单个数据库中,然后具有可以使用单独报告同时访问所有数据的单个应用程序,可以设置用户明智的访问吗?

你有什么建议,什么是正确的方法?

0 投票
1 回答
5567 浏览

uml - 在序列图中表示用户输入

如何在序列图中表示用户输入(例如,创建新帐户所需的一些信息)?

0 投票
1 回答
88 浏览

software-design - 从一个不同的狭窄需求规范创建不同的软件设计

我正在帮助一位朋友完成他的课程作业。基本上,项目要求是创建一个软件系统,以使销售乐器的音乐商店计算机化。本质不过是一个带有一些报告和销售捕获组件的 CRUD 系统。然而,他需要记录三种不同的设计规范,他将从中选择要开发的一种。他有他希望继续进行的设计,但我们正在努力创造两种替代设计。

我的困难是,需求范围如此之窄,以至于改变它是一个挑战,以至于不会创建一个单纯的副本。

我会很感激任何建议。

0 投票
2 回答
193 浏览

architecture - 架构:具有节点容错能力的分布式数据处理

我有很多需要频繁重复处理的数据/作业(数万)。要处理的作业存储在 SQL Server 2012 (Web Ed) 数据库中,该数据库会频繁更新新作业和/或可能会从中删除作业。

样本:

我的目标是将作业处理分布在多个节点上,既是出于性能原因,也是为了确保即使节点出现故障也能处理作业。

两个考虑:

  • 我需要确保所有作业最终都由某个节点执行,并且随着作业被添加到数据库驱动的队列中,这种情况会不断发生。
  • 我希望所有节点都进行一些工作,并防止单个节点获取大部分工作,因此实施某种循环似乎是有意义的。

因为整个系统需要抵抗节点故障,所以我不能真正将工作“分配”给节点,因为我不知道怎么了正常的,什么不是。我最初的想法是让每个节点从数据库中“获取”一个或多个作业,处理它们,然后将数据返回到 SQL 数据库。但是,接下来会出现一些问题:

  • 节点需要知道其他节点已经在处理什么,因此作业不会被错误地处理两次。这意味着需要将作业标记为正在处理。
  • 其中许多作业非常小,但需要非常频繁地执行(可能每 10-30 秒一次)。不断更新谁在处理作业然后释放作业,然后再次处理似乎是主要的数据库开销。
  • 如果一个节点在处理过程中死亡会发生什么?有没有办法从中恢复?

解决这个问题最有效的方法是什么?谢谢!