【发布时间】:2022-01-19 08:32:06
【问题描述】:
我正在设计我的域模型,但无法理解如何搜索具有相同 ID 的相似聚合。
假设我们有两个聚合 ActiveEmployee 和 InactiveEmployee。他们在结构上有很多差异,但也有一些共同点,因为他们都是员工,而且他们都有一个employeeId。
他们每个人都有一个带有 findById 的单独存储库,在某些情况下,我需要单独检索它们,但在某些情况下,我需要搜索员工,然后查看我得到的员工是活跃的还是非活跃的。
我首先想到让一些抽象类 Employee 有自己的存储库来进行搜索,但从我读过的内容来看,聚合不应该使用这种类型的多态性。 通过拥有两个独立的存储库,我需要在需要普通员工时检查这两个存储库,并处理我在其中一个或两个中都找不到任何存储库的情况。
在这种情况下可以使用一些最佳实践吗?
编辑:
我意识到上述情况可能无法完全表达我的问题,所以让我们试试这个:
我有两种类型的包,ProvidedPackage 不能更改,UserPackage 是由用户创建和更改的。
两者都包含模块,用户从几个不同的 ProvidedPackage 和其他 UserPackage 中选择需要哪些模块来创建新的组合包。每个模块的源包也存储在新的 UserPackage 中以供跟踪。
ProvidedPackage 包含一些关于如何使用 UserPackage 没有的特定实例模块的规则。并且 UserPackage 有一个 ProvidedPackage 没有的审批字段。 (它们之间还有其他区别)。
创建新包时,用户会从两种包类型中添加模块,而不关心它是 ProvidedPackage 还是 UserPackage。
我解决这个问题的想法是有两个单独的聚合,因为不变量有很多差异。 “PackageID”用作两种类型的标识。感觉就像父类“Package”对于我需要使用 PackageID 列表检索包的情况很有用。否则我每次都需要检查两个存储库。如果将来添加包类型,则需要添加更多检查。
【问题讨论】:
标签: polymorphism aggregate domain-driven-design