【发布时间】:2013-10-27 00:32:44
【问题描述】:
举个例子。 Supervisor 域类公开一个方法 GetUnderlings(DateTime from, DateTime to) 将返回给定时间段内由给定主管监督的所有人员。
出于令人愉悦的语义原因,该方法应放在此处。但是应该去其他地方以获得 DDD 纯度。那是因为我假设实现需要使用存储库的方法,将其嵌入域实体中似乎是错误的。在这种情况下,该方法应该在 Respository 或 Service 上运行 - GetUnderlings(Supervisor supervisor, DateTime from, DateTime to)
其他人如何处理这种情况?
编辑:我认为这些力量可以这样描述:根据 OO 原则,我希望我的实体的公共接口能够公开一组丰富的面向业务的功能。但是根据 DDD 实现原则,这些方法的实现可能最好位于其他地方。例如,在服务中。
如何解决这种明显的冲突?我可以看到的方式是:
- 让实体引用服务或服务接口
- 始终让客户端访问服务,而不是直接访问实体(结果:失去一致性,从 OO 的角度来看完全不酷)
- 使用“域事件”(?)
- 使用一些 AOP 技巧将方法的实现委托给服务。
【问题讨论】:
-
我也会在这种情况下使用
Service.GetUnderlings(...)。让我们等待有人写更深入的回复。