我有一个名为Organisation
的模型,另一个名为Account
。
Organisation
是用于创建新Account
。
Organisation
至少有一个Account
Organisation
至少有一个Account
是所有者
Account
需要属于至少一个Organisation
Account
需要拥有至少一个Organisation
所以我想介绍一个名为OrganisationAccount
OrganisationAccount
会保留与Accounts
相关联的所有Organisation
,并跟踪其中一个是否为所有者。
这是一个糟糕的设计吗?什么是更好的方法?网上有一些文章表明,与DDD的多对多关系可能非常糟糕。
在IEnumerable<Account>
模型中维护两个Organisation
属性会更好吗?
答案 0 :(得分:2)
在没有Account
的情况下处理Organisation
是否有意义?如果是,那么Organisation
不应该是包含Account
的聚合的根。您说Account
需要属于至少一个Organisation
;它可以属于多个吗?如果是,则它不能是Organisation
聚合的成员。现在听起来就像Account
和Organisation
只是两个独立的相关实体。
您可能需要更加努力地发现在这里工作的基础域概念;我试图通过挑战你的模型,充分了解Organisation
和Account
之间的关系。 Organisation
可以更改所有者吗? Account
可以更改Organizations
吗?属于Account
的每个Organisation
都可以拥有它吗?一个Account
可以拥有Organisation
的“份额”吗?
对我来说,你设计中的大气味是Organisation
和Account
之间的相互依赖关系。这种关系是非常对称的,它告诉我一个不应该是包含另一个的聚合的根。实际上,根据您的措辞,填充空Universe的唯一有效方法是在完全相同的时间创建Organisation
和Account
,并且已经相互关联。如果他们真正属于同一个聚合,那就没关系,但是唯一访问Account
的方法必须是问Organization
Owners
和Guests
。 .. Account
(?)是;除Organization
聚合的成员外,任何人都不得拥有对Account
的引用!这使得OrganisationAccount
无法与多个组织相关联(因为一个组织将持有对属于另一个组织的帐户的引用)。
Partnership
是域专家熟悉的术语吗?它听起来像是数据库中关联表的名称,但是你应该避免让这样的单词进入你无处不在的语言,除非它们对模型有用。我想到的一个词是Organization
和Account
之间的Ownership
,听起来至少有几种不同的伙伴关系:一种暗示{{1}而一个简单暗示Membership
。如果我在你的位置,我会向我的领域专家建议Partnership
一词,不是因为我认为这是正确的,而是因为我想仔细聆听他们不可避免的“好吧,这不是真正的伙伴关系,它是更像是[模型演变的下一步]。“