简单的面向对象问题:这些类中哪一个应该拥有此操作?

时间:2011-07-23 18:56:50

标签: oop uml

我正在研究一个UML类模型和(基本的)我觉得我需要看看我的假设是否正确。我有两种类型:管理员和位置。 (管理员可以在一个或多个位置的两者之间存在关系)。

管理员需要将自己分配到位置。此分配操作是否应位于“位置”类型或“管理员”类型中?一个人的理由是什么?

3 个答案:

答案 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中详细描述了这些事情