我目前正在开发一个不动产租赁应用程序(PHP),并且正在努力使自己了解DDD ...
在发现“租期”边界上下文(BC)和“账单” BC时,我注意到两个BC都有一个“租户”聚合根(AG)。但是,在每个卑诗省,“租户”的含义似乎都不同。
在不列颠哥伦比亚省的“出租期”中,有一项业务规则,即所有租户都应年满18岁。因此,Tenant AG应该有一个“ TenantId”,“ TenantName”和一个“ DateOfBirth”。
在Billing上下文中,“ TenantID”,“ TenantName”和“ BillingAddress”之类的内容很重要,但租户的年龄并不重要。
这两个BC中没有一个拥有所有租户数据的100%。
所以我的问题是,这是否意味着应该有一个单独的BC(租户管理),该BC拥有100%的租户数据,而其他两个BC中的租户将仅拥有此数据的一个子集,应该被视为只读?
答案 0 :(得分:3)
绝对:不会。不应有“ TenanatManagement” BC。租户在“租赁期”和“计费”中是不同的概念。在DDD中,您不需要围绕数据建模,也不需要中央数据模型。将域划分为子域的一个目标是避免在单个模型中具有不相关甚至可能矛盾的概念。
答案 1 :(得分:0)
完全没有,在DDD中完全可以进行数据复制。
数据集中化是一个传统概念,多年来一直是软件性能不佳的主要原因。
拥有单独的BC的目的是要使耦合松散,因此拥有数据重复是一个好习惯。
您需要注意的是消息侦听器如何更新它们?谁是数据所有者?计费服务?租金管理?两者都?外部系统?这就是您需要问自己的问题,然后您只需在两个BC上实现侦听器即可。