私はこのpaに賛成できません。 ttern。
まず最初に、Core Dataを実装の詳細として扱うようにしています。実装の詳細としては、優れた外観の下に隠す必要があります。ファサードは私のモデルオブジェクトのために公開するインターフェイスです。たとえば、2つのモデルオブジェクトがある場合Cource
とStudent
の場合、どのソースにも多数の学生が参加できます。コントローラが述語を設定してディスクリプタをソートする必要はなく、特定のクラスの生徒のリストを取得するためにすべてのコアデータフープをジャンプする必要があります。
@interface Cource (StudentAccess)
-(NSArray*)studentsStortedByName;
@end
次に、Modelクラスの中で一度、そしてすべてのものを実装してください。コアデータのすべての複雑な詳細を隠し、管理されたオブジェクトコンテキストを渡す必要はありません。しかし、どのようにソースを見つけることができますか、それはどこかで始まる必要がありますか?はい、そうですが、コントローラーに公開する必要はありません。このようなメソッドを追加するだけでなく完全に合理的です:
@interface Cource (CourceAccess)
+(Cource*)caurceByID:(NSString*)courceID;
+(NSArray*)allCources;
+(NSArray*)courcesHeldByTeacher:(Teacher*)teacher;
@end
これもは、コントローラ間の依存関係を最小限に抑えるのに役立ちます。モデルとコントローラ間の依存関係を減らします。
-(id)initWithManagedObjectContext:(NSManagedObjectContext*)moc
student:(Student*)student;
:私は
CourceViewController
と
StudenViewController
を持っていると仮定すると、私はその後、私はこのような指定イニシャライザで終わるだろう、ファサードの背後にコアデータの詳細を隠すし、同様に管理オブジェクトコンテキストの周囲を通過したかっなかったです私はこれで終わるの良い優れた外観を持つ一方
:ファサードの背後にある依存関係を最小限に抑える
-(id)initWithStudent:(Student*)student;
は、依存性注入を支持しても、それははるかに簡単に内部実装を変更することができます。マネージドオブジェクトのコンテキストを伝えることは、各コントローラが基本的なもののための独自のロジックを実装することを奨励します。例えば、studentsSortedByName
の方法をとる。最初は、最後に/ファーストネームに変更された場合は、最後に/ファーストネームで選別されるかもしれませんが、ソートした各コントローラーに行って変更を加えなければなりません。良いファサードの方法では、ある方法で変更する必要があり、すべてのコントローラが自動的にアップデートを無料で入手します。
Appleがどこに反対しているのかわかりません。それをさらに進めてコンテキストを隠すだけです。あなたは、あなたのビューコントローラがアプリケーションデリゲートか他のシングルトンから生徒やコースのリストをフェッチすることを主張しませんか? – Caleb
@Caleb - アプリケーションデリゲートからではありませんが、 'Course'クラスのクラスメソッドからコースリストを取得するのは恥ずかしいことではありません。クラスをソートのシングルトンとして扱う。 – PeyloW
私は、ソートと述語がモデル層に属しているとは思っていません。ソートと述部はインターフェイスでのみ必要なので、コントローラに属します。モデルにソートや述語を置くことは、モデルを特定のインタフェースに結びつけ、アプリケーションが扱う実世界のオブジェクト、イベント、条件のモデルシミュレーションの論理的な完全性を汚染します。 – TechZen