我正在研究一个UML类模型和(基本的)我觉得我需要看看我的假设是否正确。我有两种类型:管理员和位置。 (管理员可以在一个或多个位置的两者之间存在关系)。
管理员需要将自己分配到位置。此分配操作是否应位于“位置”类型或“管理员”类型中?一个人的理由是什么?
答案 0 :(得分:2)
在我看来,管理员将是一个有州的班级,因此知道他在哪里。该位置是一个数据输入,应该是无状态的。
因此,您可以在管理员处添加或删除位置。
IE中。典型的C#:
Administrator.Locations.Add
Administrator.Locations.Remove
另外,如果没有使用双向关系,我不会在Location类型中看到它怎么样,这似乎不合适。
答案 1 :(得分:1)
两者都是可能的,并且通过论证,两者都可以很好。
如果管理员在主服务器上登录,他可以调用AdminUtils.Locations(That).AddAdministrator(Me)
。另一方面,如果管理员位于特定位置,则可以在登录该位置之前调用AdminUtils.Administrators(Me).AddLocation(This)
。
这些问题适用于通常通过考虑责任来回答的特定情况。哪个实体负责哪些实体?
另请注意,这些Add方法完全可以是两个实体的元素,但其中一个实体存储应该只有一个。
答案 2 :(得分:0)
这取决于您的软件是什么。如果它是关于人的数据库,则管理员将包含已分配位置的列表( addLocation / removeLocation ),如果是关于地点,则位置应引用其管理员( setAdministrator 强>)。如果您跟踪分配的历史记录,那么显然分配将是一个单独的实体。 Eric Evans在DDD Book中详细描述了这些事情