【发布时间】:2011-01-13 17:39:54
【问题描述】:
给定以下实体:
容器
用户
客户
机构
Container 实体通过属性AssignedToParties 与一个或多个参与方建立关联。
Container.AssignedToParties 可以包含用户、客户和机构的组合。
这种关系的推荐领域模型是什么。
我考虑过以下选项:
1) 为每种类型创建单独的属性:
Container.AssignedToUsers
Container.AssignedToClients
Container.AssignedToInstitutions
这看起来很不优雅,但不需要业务逻辑来检查类型或进行任何向下转换。
2) 为用户/客户/机构创建一个通用基类“Party”
Container.AssignedToParties 将是 Party 实体的集合。这似乎是一个尴尬的解决方案,因为 Party 基类没有任何方法或属性。我也不确定我是否喜欢在这里添加一层继承的想法。
此解决方案与 #3 一样,需要系统在运行时检查类型以做出决策,然后向下转换到用户/客户/机构来处理它们。
3) 创建用户/客户/机构实施的标记接口 IContainerAssignable
这至少会提供一些类型安全,但需要类型检查和向下转换。
现在,我倾向于#3。这似乎是最简单的,但我在一些地方读到过,如果你的代码正在运行必须测试给定类型的逻辑并且你可能有一个糟糕的设计。
任何建议表示赞赏。
【问题讨论】:
-
用户、客户和机构有什么共同点让他们想要共享一个容器而不是存在于不同的容器中?
-
容器不包含用户/客户/机构。它是一个域对象,表示文件等资产列表。用户/客户/机构与容器相关联,以表明他们对它们的兴趣。您可以将它们视为“监视”容器。仅供参考,客户/用户共享一个公共基类 Person。机构实际上不是一个人,除了可分配给容器之外,就其属性或行为而言,它与客户/用户不共享任何内容。
标签: domain-driven-design polymorphic-associations oop