2011-12-21 6 views
2

私はこのトピックについていくつかの提案を見つけましたが、依然として私に残されていることがいくつかあります。iOS:アプリケーションのモデルアーキテクチャ

質問は、特にモデルに関するアプリケーション(開発の観点から)を設計することです。

たとえば、Facebook SDKを使用してアプリを構築しています。私はFacebook APIとのコミュニケーションのためのモデルクラスを持つことが理にかなっていると思います。そして、私はこのクラスをシングルトンにすることが理にかなっていると思います(必ずしもそうである必要はありません)。

しかし、iOS用Facebook SDKはデリゲートを基盤にしています。したがって、リクエストを送信し、応答はモデルのデリゲートメソッドで返されます。それは大丈夫ですが、モデルにデリゲートを割り当ててビューコントローラを呼び出すこともできます。

たとえば、ビューコントローラはFacebook-singleton-modelを使用してリクエストを行いますが、リクエストが完了したときにモデルがこのデリゲートを呼び出すように、このリクエストのデリゲートとして自分自身を設定します。 しかし、このモデルは1人の代理人しか持っていないシングルトンです(そして、私はそれをこのように保つ必要があります)。 各コールの前にFacebookシングルトンのデリゲートポインタを上書きしますか? (同じシングルトンを使用している間に別のリクエストが開始され、デリゲートが再び上書きされる可能性があるため、いいです。

いいアーキテクチャは何ですか?アプリケーション全体でモデルを再利用するためのベストプラクティスは何ですか?

答えて

2

私は偉大な仕事(シングルトン)

+(QuizManager *)sharedInstance 
{ 
    static dispatch_once_t pred; 
    static QuizManager *shared = nil; 

    dispatch_once(&pred, ^{ 
     shared = [[QuizManager alloc] init]; 
    }); 
    return shared; 
} 

sharedInstanceを取得する次のスレッドセーフなコードで、本当によく働く私のモデルのためにシングルトンを使用して終了もキー値 - の使用でありますiOSの観測中(KVO)。モデルのプロパティの変更を監視し、ビューコントローラで反応することができます。 IMOにより、きれいで分かりやすいコードを作成することができます。 (http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html

私はまた、モデルを使用してデリゲートとして設定し、すべてのオブザーバーに委譲メソッドをブロードキャストするデリゲートのセットを与えました。私は見つけるのも一種良いです。

2

私のアドバイスは、独自のデリゲートのプロトコルを作成し、シングルトンモデルのデリゲートとしてviewControllerを登録することです。さまざまな方法で自由に行うことができます(デリゲートをシングルトン内の配列に保持することによって)複数のデリゲートを持つことができます。

+0

私のFacebookモデルにはすでに別のモデルで使用されているカスタムプロトコルがあります。だから、実際にはView Controller - > UserManagement Model - > Facebookモデルです。 これは、この全体の代理人を働かせないことになります。 – cmart

関連する問題