域驱动设计 – 正确设计聚合根

前端之家收集整理的这篇文章主要介绍了域驱动设计 – 正确设计聚合根前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在设计聚合根时遇到了一些问题.这是我在脑海中看到的:)
Store (the aggregate root)
-> Sales - A store create a sale every day
 -> Zones - A store is divided into zones
    -> Styles - A zone has x number of styles
       --> Colors - A style has x number of colors
    etc..

现在基于此,我的聚合根将是商店.但是,如果我现在要围绕它创建一个存储库,它会是这样的吗?

public class StoreRepository()
{
  Store GetById() {...}
  StoreZone GetZone() {...}
  List<StoreZoneStyle> GetStylesByZone() {...}
  List<Color> GetColorsByStyle() {...}
}

这是继续下去的好方法吗?
不用说我是DDD的新手.

我认为你需要将聚合边界和实体看作不仅仅是层次结构的东西.机会是,你将拥有比这更丰富的模型.

判断您的聚合是否正确的第一种方法是,您可以查看其中的每个实体并询问“这是否需要直接访问?”如果您回答是,则该实体可能不是聚合的一部分.

如果不了解您的域名,我可能会认为Store确实是一个聚合.另一方面,销售更为复杂.是的,销售发生在商店,但您是否需要独立使用销售?如果您只是在使用商店的范围之外需要它们,那么Sales可能超出了该聚合.

我想象样式和颜色都是不可变的和可重复的,所以在这种情况下它们很可能是Value Objects.区域是商店独有的,还是它们有所不同?

就个人而言,我发现在纸上(或白板)识别域中的所有项目是有价值的.我将与利益相关者一起经历一个发现阶段,然后将它们带到那里.然后,使用这些词作为对话的领导者,试图理解它们之间的关系.如果您对利益相关者进行了充分的采访,他/她给出的描述实际上将定义您所寻找的大部分内容.

不要打败死马,但埃文斯的书绝对值得读/读.它有点干,但非常有见地.对于快速启动,您可以在InfoQ上阅读free book,这基本上是Evans书的摘要.

原文链接:https://www.f2er.com/javaschema/281470.html

猜你在找的设计模式相关文章