【发布时间】:2011-03-22 14:50:54
【问题描述】:
我有一个关于潜在愚蠢的数据库设计的潜在愚蠢问题。
假设我有这个设计(在使用 CoreData 的 iOS 项目中):
A 类
- 名称:NSString
- 孩子:A 类对象的 NSSet
- 父级:A 类对象
所以这是一个简单的父/子设置。这一切都很好。
现在,我想这样做,如果 A 类对象没有为“名称”定义值,则搜索其父对象,直到找到定义了“名称”的对象并返回此值。
这是一件棘手的事情,因为我的自然反应是像这样覆盖 name 的 getter:
- (NSString *)name
{
return name =! nil ? name : self.parent.name;
}
但这不起作用,因为“name”必须通过 self.name 访问,因为这是一个 CoreData 实体。
然后我有了创建一个名为 nameRecursive 的新方法的想法,其工作方式如下:
- (NSString *)nameRecursive
{
return self.name =! nil ? self.name : self.parent.name;
}
但这感觉很笨重而且不是很优雅(因为 A 类的现实版本有许多需要像这样工作的属性),但我无法想出更好的方法。
是否有人对 a) 这是否是一个愚蠢的设计或 b) 我如何以优雅的方式解决它有任何想法。
任何想法或想法都会很棒。提前致谢。
【问题讨论】:
-
您可能需要重新考虑您的设计,因为它会遮挡对象。如果您对
name进行提取,您将获得解析为该名称的所有对象。相反,如果您在图形中查找名称,您将返回第一个实际没有名称的对象命中。我不确定你在寻找什么逻辑,但你需要小心这些动态属性。 -
感谢 TechZen。我怀着忐忑的心情处理这个问题,因为它打破了很多优秀数据库设计的想法,但它确实很适合我的工作。看看结果会很有趣!希望我不会后悔!