私は、AFNetworking 内での独自性のための優れたアーキテクチャを設計しようとしています。たとえば、User が多くの Thing を持つことができ、それぞれの Thing がそれを所有する User に対して対称的な対 1 関係を持っている状況を考えてみましょう。
たとえば、ログイン時にユーザーを初期化するためのパターンは明確です。解析されたデータから Thing オブジェクトの配列を作成し、それを User に設定します。(以下を参照してください。) 類似の 'update' メソッドも同様です。
**User.m:**
- (id)initWithAttributes:(NSDictionary *)attributes {
// snip. . . .
_userID = [[attributes valueForKeyPath:@"id"] integerValue];
_username = [attributes valueForKeyPath:@"username"];
_avatarImageURLString = [attributes valueForKeyPath:@"avatar_image.url"];
NSArray *thingsData = [attributes valueForKeyPath:@"things"];
NSMutableArray newThings = [NSMutableArray array];
for (NSDictionary *aThing in thingsData) {
Thing *thing = [[Thing alloc] initWithAttributes:aThing];
[newThings addObject:thing];
}
self.things = [newThings copy];
return self;
}
しかし、Things 属性をどう処理すればよいでしょうかuser
。特に、たとえば、さまざまなユーザー、ログインしているユーザー、その他のユーザーへのポインターを持つ可能性がある大量の Thing の配列を取得する場合はどうすればよいでしょうか?
AFNetworking プロジェクトのサンプル コードを考えてみましょう。
**Thing.m**
- (id)initWithAttributes:(NSDictionary *)attributes {
// Init, etc . . . .
_user = [[User alloc] initWithAttributes:[attributes valueForKeyPath:@"user"]];
return self;
}
このコードはぶら下がっている User オブジェクトの群れを作成し、明らかに進むべき道ではありません。最善の解決策は、EOF/CoreData が行うことと似たようなもので、関連付けられたオブジェクトをオンデマンドでフォールトし、ID に基づいてデータベースを維持することです。その機能を複製することもできますが、これは非常に一般的なユースケースのようで、すでに行われていると思います。
この機能のためだけに RestKit を使用したくありません。このアプリにはやり過ぎです。
良いパターンの提案はありますか? AFNetworking 内にいくつかのロック機能がありませんか?