Architecture 确定DDD体系结构中的存储库和聚合大小及职责
一个具体的(我希望)问题,如果可能的话,我希望有一个具体的答案。。。关于骨料和储存库的DDD体系结构,责任和细粒度 假设我有以下(简化的)表格:Architecture 确定DDD体系结构中的存储库和聚合大小及职责,architecture,domain-driven-design,ddd-repositories,aggregateroot,Architecture,Domain Driven Design,Ddd Repositories,Aggregateroot,一个具体的(我希望)问题,如果可能的话,我希望有一个具体的答案。。。关于骨料和储存库的DDD体系结构,责任和细粒度 假设我有以下(简化的)表格: 客户[id、名称、组id、类别id] customerGroup[id,名称] customerCategory[标识,名称] 基本功能(仅显示方法的示例用法) 显示客户列表并单击以显示一个客户。 编辑客户并从所有组的下拉列表中选择组。对Cateogray也是一样 问题 我应该考虑客户群和类别作为单独的集合: 客户地址。使用GetAllCusto
- 客户[id、名称、组id、类别id]
- customerGroup[id,名称]
- customerCategory[标识,名称]
我应该考虑客户群和类别作为单独的集合:
- 客户地址。使用GetAllCustomers、GetCustomerById等方法
- CustomerGroup存储库。使用方法GetAllCustomerGroup、GetOneCustomerGroup
- 客户分类报告。使用方法GetAllCustomerCategory、GetOneCustomerCategory
我试图在这里找到类似的例子,也阅读了沃恩·弗农的文章,但没有看到他的产品聚合示例是如何处理产品类别的 用户可以创建一个类别而不需要任何客户吗?如果回答是,则该类别是根聚合,并且应该有自己的存储库
客户群也是如此。如果它们只是您标记客户的一种值,那么它是一个子聚合(或者更确切地说是一个值对象,请与标记进行比较)。如果您应该能够独立创建组,然后将客户附加到组中,那么您应该将它们定义为根聚合。由于此域基本上是分层的,因此没有特定的聚合模型可从中派生。您基本上只是在其他容器中的容器中有一些哑数据结构。看不到不变量或业务规则,也看不到将被大量并发访问的部件的提示 如果这就是这个领域的全部内容,我就不用麻烦使用DDD战术模式来建模了,它只是CRUD
正如书名所述,DDD是关于解决软件的复杂性,而不是在简单的问题上不必要地拔掉你的头发。我完全同意不要过度设计一些东西。在本例中,还有更多内容,这是一个相当(太)大的应用程序的一部分,其中已经使用了DDD回购协议和服务,并且有相当多的业务规则。但我很喜欢你的观点,我将尝试看看上下文的某些部分是否可以被CRUD以保持简单,而不会偏离上下文中的集合架构。很好的问题,谢谢。目前的答案是否定的——因此我将在一次回购中保持简单。如果这发生了变化,那么重构将随之而来。