我做DDD已经有几年了,当涉及到设计Aggregate时,它仍然是一个挑战。这就是DDD的有趣之处,它会让你头晕。我之所以问这个问题,是因为我是一个项目的架构师,我们正在设计模型。当模型与GUI并行发展,并与客户一起收集需求时,这是一次迭代。现在来看看问题所在。我们的场景是,我们面临着一些正在成长为非常大的AR的Aggregate,我认为我擅长寻找价值对象,并避免领域模型陷阱。但我从来没有遇到过这种情况。一个例子是我们的系统应该表示一个移动电信天线。天线位于绿色区域。但是天线可以有一个带有设备的遮蔽物。天线可以有微波链路,它可以在地面上有光纤线路,它可以有无线电元件,它可以有电源。面对现实吧。如果天线被终止..。所有这些依赖关系也会被移除。因为它们是安装的一部分(除了绿色字段:)),但您了解情况。天线模型很复杂..。而大型AR在并发锁定、性能和内存消耗方面是不灵活的。
在阅读了Vaughn Vernons关于有效的AR设计http://dddcommunity.org/library/vernon_2011/的非常好的论文后,我意识到我们需要开始把我们的大AR切成碎片。
我的想法是像弗农建议的那样搬出去,例如MicrowaveLinks到一个单独的AR (即使它不在现实中)。MicrowaveLink实体,现在是AR,是按Id的参考天线。在MicrowaveLink实体类中,我们有一个为AntennaId的值对象属性。我们的用例支持这个场景。我们很少将天线和链路一起列出。因此,可以通过MicrowaveLinkRepository.ListByAntenna(Guid antennaId)加载MicrowaveLinks
1)你以前做过这种AR拆分吗?你是如何做到的? 2)你是否设法通过域约束和DB (我们使用EF 5作为ORM)完整地支持这种AR --> AR关系?
我的最佳目标是能够跳过天线上的Antenna.Microwaves集合。所以天线不知道是否有连接。链路知道它们安装在什么天线上。在MicrowaveLink实体中,我只想要一个AntennaId属性,希望有一个确保天线存在的DB约束。
我知道我可以通过T-SQL脚本在EF或DB中的Seed方法中手动添加FK约束。但是,EF5代码优先流畅映射能以某种方式支持这种关系吗?
发布于 2013-07-13 01:03:30
听起来你有一台Installation AR。当需要另一个AR时,您应该将包含的AR建模为容器中的唯一ID或VO (如果需要)。
你需要在你的鼻子周围有坚硬的边缘。
回到Order / OrderLine示例:)
一个OrderLine似乎“需要”一个产品,但是你不应该给OrderLine一个产品实例。相反,仅将ProductName和ProductId建模为OrderLine中的VO。现在,您拥有了Order AR的独特优势。
希望这能有所帮助。
https://stackoverflow.com/questions/17611635
复制相似问题