0

私は、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 内にいくつかのロック機能がありませんか?

4

2 に答える 2