域驱动设计 – 正确设计聚合根
|
我在设计聚合根时遇到了一些问题.这是我在脑海中看到的:) 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() {...}
}
这是继续下去的好方法吗? 判断您的聚合是否正确的第一种方法是,您可以查看其中的每个实体并询问“这是否需要直接访问?”如果您回答是,则该实体可能不是聚合的一部分. 如果不了解您的域名,我可能会认为Store确实是一个聚合.另一方面,销售更为复杂.是的,销售发生在商店,但您是否需要独立使用销售?如果您只是在使用商店的范围之外需要它们,那么Sales可能超出了该聚合. 我想象样式和颜色都是不可变的和可重复的,所以在这种情况下它们很可能是Value Objects.区域是商店独有的,还是它们有所不同? 就个人而言,我发现在纸上(或白板)识别域中的所有项目是有价值的.我将与利益相关者一起经历一个发现阶段,然后将它们带到那里.然后,使用这些词作为对话的领导者,试图理解它们之间的关系.如果您对利益相关者进行了充分的采访,他/她给出的描述实际上将定义您所寻找的大部分内容. 不要打败死马,但埃文斯的书绝对值得读/读.它有点干,但非常有见地.对于快速启动,您可以在InfoQ上阅读free book,这基本上是Evans书的摘要. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
