我正在尝试DDD(域驱动设计)领域的第一步.我喜欢明智的规则,你应该将你的实体分成许多较小的,特定于上下文的实体(例如,User实体往往在每个非ddd或设计不佳的应用程序中都会过度生长).但是在使用Doctrine的php中如何(有效地)实现它的常见选项是什么?
假设我有两个有界的上下文:Store和Invoicing
它们中的每一个都有两个域实体:对于Store BC而言FirstTimeCustomer,RecurrentCustomer
对于Invoicing BC它是VatCustomer和NonVatCustomer
现在,在我的基础设施层中,我希望它们全部保存在同一个(至少是基础)表中,以便能够通用UserId(Uuid)引用它们.对我来说问题是,如何做到这一点,所以我可以利用我的存储库实现中的doctrine自动化.
我读到了可能是解决方案的单表继承或类表继承,但是:
我需要能够使用User相同的Uuid,因为它在每个上下文中都是不同的类型.
我需要能够在商店BC中返回一些AbstractStoreCustomeraka FirstTimeCustomer或RecurrentCustomeron $storeCustomerRepository->find(1);.
并在发票BC中返回一些AbstractInvoicingCustomeraka VatCustomer或NonVatCustomeron $invoicingCustomerRepository->find(1);.
但似乎我被迫在这里选择BC我想要的实体的特定身份.所以在DDD的背景下对我来说根本没有意义.
我还阅读了Mapped Superclasses,它看起来也像是选项,但是:
这意味着根本不可能在映射的超类上进行一对多关联.
而且我需要Customer与订单有关系,这两个实体应该是可用的(也可能不希望它可用于User新BC中的一些新类型的实体).
我得出结论,我应该怀疑我错过了什么,是吗?我应该如何将上帝实体打造成更小的特定背景?