2012-03-08 84 views
0

我正在建设一个应用程序,其中系统的主要输入之一将实时滴答值。DDD和滴答作为输入数据

我希望能够使用DDD,因为我相信我的模型中有足够的复杂性来保证它,但是我不确定如何构造事物。知识库是获取数据的方式,但是我看到的每个参考都将其定义为基于拉的。即当我想要数据时,我会询问存储库,它会为您返回一个实体/聚合根。我的情况我将有用于设置我的聚合根的存储库,但是我需要更新内部的实体,而不需要我提出任何请求。

我对此的解决方案是定义聚合根呼叫启动滴答的域服务。人们认为这是正确的路吗?

如果服务是正确的事情,人们对责任的意见是什么。是否应该知道聚合根,并用滴答的实体改变它的状态,或者它是否应该盲目地推送数据,并且聚合根本身知道它正在以这种方式接收数据,那么在收到数据时监听它并进行相应更新?

任何指针/评论/火焰感谢。

+0

您起诉C#。那么你为开发人员获得SQL Server的副本并检查他们刚才添加的子系统是否完全相同?忽略这些设计模式可能并不聪明。不是说你不能做到与众不同,更像是你在你面前的例子。关键字是“StreamInSight”。 – TomTom 2012-03-08 13:05:24

+0

感谢您的评论,但我已经对使用Rx接收流式输入的技术堆栈感到满意。问题是关于如何使用ddd而不是在sql server – Fen 2012-03-08 13:10:14

+0

AH中设计事物?我没有告诉你使用它,但看看他们的API。你问如何实现它,并且我发布了一个完全在.NET中进行学习的安装程序。如果你不想学习,你为什么要问? – TomTom 2012-03-08 13:12:37

回答

0

Rx是一种通过使用状态相互隔离的组合器来抽象状态和发生的方法。您在Rx中唯一可以使用的地方是当您使用主题时。所以一般变异的对象,并发送,它已经变异是不是很实用的通知(怎么样重入?)

如果你有许多不同的服务的Pub/Sub系统还是不错的。发布可以发生在多个点上,并可以组合成一个流,并且在特定的流上可以有很多订阅者。

0

我发现DDD的概念与Rx很好地协作。尽管Asti提供了支持不变性的好处,但最终大多数应用程序需要在某处进行变化。我发现如果你能分离你的突变发生的地方,那么这是一个很好的中间立场。

根据这一点,我建议器(Rx流)数据的序列应该包含不可变数据。具有变异数据序列可能非常难以使用。

考虑到这一点,我们现在可以有一个拱门,其中回报您在聚合根。您的聚合根可拨打服务其提供的数据序列,理想值类型。您的聚合根现在可以将任何永远的域逻辑应用于传入数据(可能包括改变它自己的状态)。

所以我可以想象您的工作流程将看起来像

  • 消费与资源库的请求AggRoot
  • 库使用工厂来创建或重新实例化AggRoot
  • AggRoot被注射服务时创建
  • 消费者然后调用AggRoot上的某些功能
  • 这会调用底层服务以获取序列。
  • 的AggRoot订阅该序列并处理该数据。