这是一个不同的视角,可能会让你摆脱僵局。
我觉得你正在做数据建模而不是真正的域建模。您关注的是使用ORM(EF)直接持久化的关系模型,而不太关心实际的问题域。这就是为什么你担心项目会加载太多东西,或者哪些对象会将外键保存到什么东西。
另一种方法是暂时忘记持久性并专注于可能需要什么责任的事情。有责任我不是指保存/加载/搜索等技术问题,而是域定义的东西。就像创建任务,完成任务,添加评论等一样。这应该给你一个大纲,比如:
interface Task {
…
void CompleteBy(User user);
…
}
interface Project {
…
Workstream CreateWorkstreamFrom(Template template);
…
}
</code>
此外,不要过分关注什么是实体,值对象,聚合根。首先,以您和您的同事满意的方式正确地代表您的业务。这是重要的部分。尝试与非技术人员讨论您的模型,看看您使用的语言是否合适,是否可以与之进行对话。你可以决定
后来
什么对象是实体或价值对象,那部分纯粹是技术性的,不那么重要。
另一点:不要将模型直接绑定到ORM。 ORM是钝器,可能会迫使你做出糟糕的决定。您可以
使用
域对象中的ORM,但不要使它们成为一个
部分
ORM。这样,您可以以正确的方式执行您的域,并且不必害怕为特定功能加载太多。您可以为所有业务功能做正确的事情。