我的聚合根节点的一个属性是类似实体任务的树。像
- Node
- Name
- Release
- User
- task
- task
- task
- task
- task
任务的树可能非常大,因此未完全加载到内存中。我可以实现某种类型的对象延迟加载或动态查询。此外,我需要一个简单的方法来添加一个像Task :: addSubtask这样的函数的新任务......但是我的直觉告诉我这些解决方案在很多层面都是错误的。
我正试图从这个问题中学习一些关于DDD的课程。所以我想找到对这些假设的确认。
任何聚合根应始终完全加载。任何部分加载都需要一个子组件能够执行一个查询(通过一个仓库,存储的查询...),这会产生很多规则:单一责任,对持久性机制的无知......(注意:我没有ORM默认情况下提供延迟加载的图层
内存中任务的“树形”实际上只对GUI中的Outline视图是必需的。因此,我应该有一个虚拟复合,可以对我的域模型的服务层执行查询。
由于没有理由在节点的上下文之外有任务,我的节点存储库应该处理任何需要树探索的操作,比如:
(List *)findChildrenOfTask(Task * aTask)
(List *)findChildrenOfTask(Task * aTask,String regexInText)
(void)addChildToTask(Task * aTask)
这些是我的假设,但我想与有更多DDD经验的人确认一下。 “仅GUI中的树”似乎也激发了一些关于CQRS思想的想法。这个问题是采用CQRS用于DDD的好处的一个例子吗?
答案 0 :(得分:3)
这个确切的例子实际上是在Vaughn Vernon的书实现领域驱动设计
中解决的。那说我邀请你思考以下内容:
我将完全承认,弗农在解释这一问题方面比我做得更好。