これはかなり単純な質問だと思いますが、何度もグーグルで検索した結果、意図した結果を超えたと思います。私の質問は設計パターンに関連していると思いますが、残念ながら間違っている可能性があります。
私のアプリケーションは 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
同様のユース ケースでの Factory または Builder Desing パターンの使用に関するさまざまな記事を読みましたが、このかなり単純なケースでそれが必要かどうかに興味があります。たとえば、現在のコードは と の両方のインスタンスを作成することになりますNNEntity
かNNSubEntity2
? 次のようなものを呼び出す場合:
NNEntity *newEntity = [[NNSubEntity2 alloc] init];
//assume dict exists already and is properly keyed
[newEntity readFromDict:dict];
私はそうではないと思いnewEntity
ますが、共通のプロパティとentityID
一意のプロパティの両方middleName
を正しく設定しますか? また、より優れた、またはより効率的な設計アプローチについての考えがあれば、非常にありがたいです。