鉴于以下实体:
容器
用户
的客户端
的机构
Container实体通过属性AssignedToParties与一方或多方建立关联。
Container.AssignedToParties 可以包含用户,客户和机构的混合。
此关系的推荐域模型是什么。
我考虑过以下选项:
1)为每种类型创建单独的属性:
Container.AssignedToUsers
Container.AssignedToClients
Container.AssignedToInstitutions
这似乎非常不优雅,但不需要业务逻辑来检查类型或进行任何向下转换。
2)为用户/客户/机构创建公共基类“Party”
Container.AssignedToParties将成为Party实体的集合。这似乎是一个难以解决的解决方案,因为Party基类没有任何方法或属性。我也不确定我喜欢在这里添加一层继承的想法。
此解决方案与#3一样,需要系统在运行时检查类型以做出决策,然后向下转发到用户/客户/机构以处理它们。
3)创建用户/客户/机构实施的标记界面IContainerAssignable
这至少会提供某种类型的安全性,但需要进行类型检查和向下转换。
现在,我倾向于#3。这似乎是最简单的,但我已经阅读了几个地方,如果你的代码正在运行必须测试给定类型的逻辑,并且你可能有一个糟糕的设计。
任何建议表示赞赏。
答案 0 :(得分:0)
根据你对我的问题的评论,我根本不会让容器处理任务。要使用您的示例,文件不知道或不关心谁在观看它。
相反,我要么让观察者实现一些方法(或集合属性)来开始观看一个容器(在这种情况下,使它们成为IContainerWatcher之类的东西会有意义),或者让观察功能卸载完全进入一个致力于维护关联的服务,就像发布/订阅机制一样。这在概念上类似于数据库模式中的多对多连接表。