1

我正在使用 xcode 和核心数据创建数据模型。这是一个对象图,而不是实体关系模型,所以我有继承和多对多关系。

这是我的问题:我有一个名为 Category 的类或实体。某些类别由应用程序创建,用户无法删除或修改。用户可以创建自己的类别。

经过思考,我找到了 4 种方法来对此进行建模。看图片:

在此处输入图像描述

我想最实用的解决方案只是添加一个标志 isSystemCategory,但我想知道从建模的角度来看最好的解决方案是什么。我猜是第一个。一个叫做Category的抽象类,以及2个后代,可编辑和可删除的UserCategory和不可变的SystemCategory,用户不能删除或修改。请注意,后代不会添加任何属性、关系或任何更改,所以,这就是我提出问题的原因。这对建模者来说是正确的方法吗?

我想知道你的想法。谢谢。

4

1 回答 1

1

根据描述,我可能也会选择第一个。

请注意,后代不会添加任何属性、关系或任何更改

但行为不同。而且也有逻辑上的差异。User 和 UserCategory 之间存在隐含的“关系”,允许用户创建/更新/删除 UC。您可能不需要明确地持有它,但它仍然存在(并且您可能会捕获它,例如,如果您想记录谁创建/修改/删除了该类别)。

创建单独的子类型将防止出现一些令人讨厌的条件逻辑,如果您使用例如标志,这些条件逻辑会突然出现。想想删除:有了一个标志,你就会有一个if (category.isUserCategory) then <delete> else <...etc...>. 此外,对于每个操作,对于用户类别与系统类别的行为不同,该逻辑将被复​​制。使用子类型消除了这一点:UserCategory.delete()只是这样做,SystemCategory.delete()只是没有(在 SystemCategory 上甚至可能没有公共删除)。没有条件。

最后一个想法:这里的问题实际上与授权有关。如果处理类别是它出现的唯一地方,那么您的选项 (1) 可能是一个务实的解决方案(“可能工作的最简单的事情”)。但是,如果您经常需要控制访问,您可能应该使用更通用的授权机制。

hth。

于 2012-04-11T11:39:39.883 回答