何时使用领域事件而不是双重分派?

7
我对何时使用领域事件和何时使用双重分发感到困惑。Udi鼓励我们使用领域事件来维护模型的封装性,远离贫血设计,但在我看来,领域事件只能在操作完成后或意外结束时使用,而不能在操作进行中使用。
例如:在解决某些业务逻辑时,我需要访问存储库,然后根据值引发领域事件。但问题是模型如何在解决业务逻辑时访问存储库,在我看来,我们可以在这里使用双重分发。
请告诉我,以上陈述是否有效?
1个回答

6

关于这个问题已经有很多讨论了。

我个人同意Szymon Pobiega的观点:

我的经验法则是,当交互可以单向进行时,使用领域事件(如Udi所描述)作为首选的IoC方式。如果不能,则使用双重分派。


例如:在解决一些业务逻辑时,我需要访问仓库,然后根据值引发领域事件。

您的聚合根应包含执行操作所需的所有内容。在执行某些操作时不应需要使用仓库。聚合根会绘制事务边界。


有时候你需要调用外部的网络服务来获取实体内的值,你会怎么做呢?使用双重分派吗?在实体内部,可以这样写:public void DoSomething(IApplicationService service) { ... var rate = service.GetCurrentRate(); .... } - sawe
同意@sawe的观点,我认为在使用外部Web服务时没有其他真正的解决方案?双重调度似乎是唯一的选择。 - Cool Breeze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接