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