Architecture 确定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

一个具体的(我希望)问题,如果可能的话,我希望有一个具体的答案。。。关于骨料和储存库的DDD体系结构,责任和细粒度

假设我有以下(简化的)表格:

  • 客户[id、名称、组id、类别id]
  • customerGroup[id,名称]
  • customerCategory[标识,名称]
基本功能(仅显示方法的示例用法)

显示客户列表并单击以显示一个客户。 编辑客户并从所有组的下拉列表中选择组。对Cateogray也是一样

问题

我应该考虑客户群和类别作为单独的集合:

  • 客户地址。使用GetAllCustomers、GetCustomerById等方法

  • CustomerGroup存储库。使用方法GetAllCustomerGroup、GetOneCustomerGroup

  • 客户分类报告。使用方法GetAllCustomerCategory、GetOneCustomerCategory

或仅一次回购 -CustomerRepository(使用上述所有方法,更明确地命名)

上面的层在任何情况下都是一个CustomerService,上面注入了一个/多个repo

我很想了解如何考虑聚合和相关数据(类别、组)的大小以及细粒度存储库的优缺点。仍然保持简单,专注于以一种好的方式解决问题,而不需要过度架构


我试图在这里找到类似的例子,也阅读了沃恩·弗农的文章,但没有看到他的产品聚合示例是如何处理产品类别的

用户可以创建一个类别而不需要任何客户吗?如果回答是,则该类别是根聚合,并且应该有自己的存储库


客户群也是如此。如果它们只是您标记客户的一种值,那么它是一个子聚合(或者更确切地说是一个值对象,请与标记进行比较)。如果您应该能够独立创建组,然后将客户附加到组中,那么您应该将它们定义为根聚合。

由于此域基本上是分层的,因此没有特定的聚合模型可从中派生。您基本上只是在其他容器中的容器中有一些哑数据结构。看不到不变量或业务规则,也看不到将被大量并发访问的部件的提示

如果这就是这个领域的全部内容,我就不用麻烦使用DDD战术模式来建模了,它只是CRUD


正如书名所述,DDD是关于解决软件的复杂性,而不是在简单的问题上不必要地拔掉你的头发。

我完全同意不要过度设计一些东西。在本例中,还有更多内容,这是一个相当(太)大的应用程序的一部分,其中已经使用了DDD回购协议和服务,并且有相当多的业务规则。但我很喜欢你的观点,我将尝试看看上下文的某些部分是否可以被CRUD以保持简单,而不会偏离上下文中的集合架构。很好的问题,谢谢。目前的答案是否定的——因此我将在一次回购中保持简单。如果这发生了变化,那么重构将随之而来。