我被分配了一个非常简单的项目作为考试,我有想法使用域驱动设计开发它。
你们中的许多人可能会说应用程序非常简单,因此使用存储库和UoW只是浪费时间,而你可能是正确的,但我认为这是一个学习更多东西的机会。
该应用程序是一个“机票”系统,从下图中你可能会猜到它的功能。
问题是我不确定我是否正确地分离了聚合物及其根源。
编辑: 我展示了数据模型,因此任何人都可以轻松发现整个功能。
事实是,从雇员的角度来看,作为“Rad”的航班表示封装整个功能并且是聚合根。
然而,从管理员的角度来看,航班不是他的商务。 他只想更新或添加新的飞机公司等。
然后有一个新的聚合根,即Airplane,它将飞机座位(实体),seatType(值对象)和公司(实体)封装为新聚合。
为了解释更多,我想到了管理员想要插入新公司,或者想先加载公司然后再加载其飞机的情况。
DDD原则说聚合内的任何实体只能从根本身加载。 所以这就是混乱。
答案 0 :(得分:0)
嗯,这里的Aggregate和Aggregate根源在哪里?这只是数据模型...非域模型。
聚合是聚集在一起的项目集群(域对象),聚合根是实体根...(如果您认为Flight Aggregate封装了Seats,Location ... Aggregate Root应该是Flight实体)
[编辑]
你必须忽略持久性。在你的应用程序中,你可以有许多聚合它取决于你的域,也许Flight是一个Aggregate和Company另一个;),不要混淆实体和聚合......
答案 1 :(得分:0)
聚合是一组实体(具有标识的对象),也可能是值对象(没有标识的对象,不可变)。聚合中只有一个实体是聚合根。您可以通过检查聚合中的其他对象是否依赖于它来轻松识别它,例如,如果删除聚合根类型的对象,则其余对象不再有意义(在数据库术语中,您将级联删除依赖对象。)
聚合根是聚合中唯一可以访问聚合中其他类型的对象,因此每个聚合都有一个存储库,并返回聚合根类型的实例。