我担心这是一个相当简单的问题,但经过大量谷歌搜索后,我认为我已经超出了我的预期结果。我相信我的问题与设计模式有关,但可惜我可能是错的。
我的应用程序调用 RESTful API 并返回相当于由NSDictionary
. 我将调用其中的每一个NNEntity
。NNEntity 有(概念上)多个不同的子类型。的所有子类型NNEntity
共享 的属性entityID
,但每个子类型也都有自己独特的属性。的所有实例NNEntity
都有一个调用方法readFromDict:(NSDictionary *)d
来填充它们各自的属性。NNEntity
此方法由所有子类型都遵循的协议强制执行。它看起来像这样:
//NNEntity.h
@interface NNEntity : NSObject <NNReadFromDictProtocol>
@property (nonatomic, strong) NSString *entityID;
@end
//NNEntity.m
@implementation NNEntity
- (void)readFromDict:(NSDictionary *)d {
//set common properties from values in d
self.entityID = [d objectForKey:@"ID"];
}
@end
//NNSubEntity1.h
@interface NNSubEntity1 : NSEntity <NNReadFromDictProtocol>
@property (nonatomic, strong) NSString *favoriteColor;
@end
//NNSubEntity1.m
@implementation NNSubEntity1
- (void)readFromDict:(NSDictionary *)d {
[super readFromDict:d];
//set unique properties from values in d
self.favoriteColor = [d objectForKey:@"colorPreference]:
}
@end
//NNSubEntity2.h
@interface NNSubEntity2 : NSEntity <NNReadFromDictProtocol>
@property (nonatomic, strong) NSString *middleName;
@end
//NNSubEntity2.m
@implementation NNSubEntity2
- (void)readFromDict:(NSDictionary *)d {
[super readFromDict:d];
//set unique properties from values in d
self.middleName = [d objectForKey:@"middleName]:
}
@end
我已经阅读了关于在类似用例中使用工厂或构建器设计模式的各种文章,但我很好奇在这个相当简单的情况下是否有必要这样做。例如,我当前的代码是否最终创建了这两个和实例,NNEntity
如果NNSubEntity2
我要调用这样的东西:
NNEntity *newEntity = [[NNSubEntity2 alloc] init];
//assume dict exists already and is properly keyed
[newEntity readFromDict:dict];
我假设不是,但是会newEntity
同时具有正确设置的共同属性和entityID
唯一属性middleName
吗?此外,如果您对更好或更有效的设计方法有想法,我们将不胜感激。