0

我正在设计一个名为ContactInfoEntity的对象,它有一个 NSString 属性contactInfoEntityType和一个容器对象properties,它根据它的contactInfoEntityType存储任意数量的属性。

目标是让用户能够在运行时定义新的ContactInfoEntityType 。

现在我在 ContactInfoEntityType 中使用 NSMutableDictionary,它的键:@"typeName" 的值:@"Generic"。

要定义新的 ContactInfoEntityType,我更改键的值:@"typeName" 并添加新键:@"newPropertyName1", @"newPropertyName2",... 以 NSDicts 作为值。嵌套字典的键类似于:@"defaultValue", @"index", @"formatToken", ...

发送时[ContactInfoEntityFactory contactInfoEntityOfType:emailInfoEntityType];,工厂获取带有@"emailInfoEntityType" 作为其@"typeName" 键值的NSMutableDictionary,并看到有三个附加的字典条目:@"domain"、@"localPart" 和@"emailNickname"。

然后,它创建一个 ContactInfoEntity,其contactInfoEntityType为@"emailInfoEntityType",并且属性容器具有三个具有关联默认值的条目。

现在我的属性容器是一个 NSArray 和一个 NSMutableArray。NSArray 保存 newPropertyNames 而 NSMutableArray 保存值 - 两者都在同一个索引处。NSArray 确实复制了实体类型定义中的一些信息,但我觉得它使各个实体中的数据保持有意义,以防定义被清除。

这是解决这个问题的合理方法吗?这是迄今为止我尝试过的最抽象的对象,但我还没有完全理解所有常见的设计模式。

具体来说,是否有比 NSMutableDictionary 用于类型定义和 NSArray/MutableArray 用于属性对象更合适的类?

对我提出问题的方式的任何输入也表示赞赏。

4

1 回答 1

0

唯一让我觉得可能很烦人的是:

“现在我的属性容器是一个 NSArray 和一个 NSMutableArray。NSArray 保存 newPropertyNames 而 NSMutableArray 保存值 - 两者都在同一个索引处。”

我长期以来不喜欢将并行数组作为关联数据元素的一种方式。我推荐一个对象数组,每个对象都包含一个名称/值对。它可以防止某些类型的下标错误,并在需要时为特定对的逻辑提供机会。

于 2012-05-16T21:55:23.093 回答