コアデータを使用して書いたほとんどのアプリケーションは、共通パターンに従います。モデルクラスはNSManagedObject
から継承し、NSManagedObjectContext
に挿入して作成されます。コアデータをデカップリング
新しいサイドプロジェクトでいくつかの異なる永続性オプションを評価しているので、コアデータ実装をコードの他の部分から分離する方法を見つけることが大好きです。たとえば、プロトコルを使用して定義されたDataStore
という概念を代わりに使用することができます。どの実装でも特定の機能を提供する必要があります。例えば、getCars
,addCar
およびdeleteCar
。アプリケーションは、getCars
がCore Data、Realm、ローカルファイルなどからフェッチしているかどうかを知る必要はありません。DataStore
のコアデータ実装を実行した直後の問題の1つは、 Car
がデータモデルにエンティティとして追加された場合、指定されたイニシャライザ以外のコンテキストを挿入することを除いて、Car
オブジェクトを作成することはできません。この点は明らかに飛ばないでしょう。なぜなら、さまざまなビューコントローラや他のクラスから、NSManagedObjectContext
などの知識を分離することが重要なためです。
コアデータのすべてのエンティティ(たとえばCDCar
)に別の名前を使用してから、CDCar
とCar
にマッピングするためのコードを追加することを考えていました。または、CDCar
が準拠するアプリでの一般的な使用のために、Car
のプロトコルを作成することもできます。これにはより一般的なアプローチがありますか?
あなたの 'Car'オブジェクトのような余分なレイヤーを使うことで、' faulting'という最も強力なCoreDataメカニズムが緩くなることを覚えておいてください。 'Car'をフェッチするときには' Engine'エンティティ、 'Owner'エンティティなども取得する必要があります。関連するすべてのオブジェクトのグラフを作成する必要があります。 – psci
ありがとうございます、はい、私はそれを考慮しませんでした。契約の破り者かもしれない。 –