我正在使用xcode和核心数据创建数据模型。它是一个对象图,而不是实体关系模型,所以我有继承和多对多关系。
这是我的问题: 我有一个名为Category的类或实体。某些类别由应用创建,用户无法删除或修改。用户可以创建自己的类别。
在考虑之后,我发现了4种模拟方法。见图:
我想最实用的解决方案就是添加一个标志isSystemCategory,但我想知道从建模的角度来看什么是最好的解决方案。我猜第一个。一个名为Category的抽象类,和2个后代,可编辑和可删除的UserCategory,以及不可更改的SystemCategory,用户无法删除或修改。请注意,后代不会添加任何属性,关系或任何更改,因此,这就是我的问题的原因。对于建模者来说这是一种正确的方法吗?
我想知道你的想法。谢谢。
答案 0 :(得分:1)
根据描述我也可能会选择第一个。
请注意,后代不会添加任何属性,关系或任何属性 变化
但行为不同。而且也存在逻辑差异。 User和UserCategory之间存在隐含的“关系”,允许用户创建/更新/删除UC。您可能不需要明确地保留它,但它仍然存在(并且您可以捕获它,例如,如果您想记录创建/修改/删除类别的人)。
创建单独的子类型将防止出现一些令人讨厌的条件逻辑,否则如果您使用例如一只旗。想想删除:用旗帜你有一个if (category.isUserCategory) then <delete> else <...etc...>
。此外,对于用户与系统类别行为不同的每个操作,将复制该逻辑。使用子类型会删除:UserCategory.delete()
只是这样做,SystemCategory.delete()
只是没有(在SystemCategory上甚至可能没有公共删除)。没有条件。
最后一个想法:这里的问题实际上是关于授权。如果处理类别是唯一出现的地方,那么你的选择(1)可能是一个实用的解决方案(“最简单的事情可能有效”)。但是,如果您经常需要控制访问权限,则可能应该使用更通用的授权机制。
第h