2017-04-07 2 views
1

コアデータを使用して書いたほとんどのアプリケーションは、共通パターンに従います。モデルクラスはNSManagedObjectから継承し、NSManagedObjectContextに挿入して作成されます。コアデータをデカップリング

新しいサイドプロジェクトでいくつかの異なる永続性オプションを評価しているので、コアデータ実装をコードの他の部分から分離する方法を見つけることが大好きです。たとえば、プロトコルを使用して定義されたDataStoreという概念を代わりに使用することができます。どの実装でも特定の機能を提供する必要があります。例えば、getCars,addCarおよびdeleteCar。アプリケーションは、getCarsがCore Data、Realm、ローカルファイルなどからフェッチしているかどうかを知る必要はありません。DataStoreのコアデータ実装を実行した直後の問題の1つは、 Carがデータモデルにエンティティとして追加された場合、指定されたイニシャライザ以外のコンテキストを挿入することを除いて、Carオブジェクトを作成することはできません。この点は明らかに飛ばないでしょう。なぜなら、さまざまなビューコントローラや他のクラスから、NSManagedObjectContextなどの知識を分離することが重要なためです。

コアデータのすべてのエンティティ(たとえばCDCar)に別の名前を使用してから、CDCarCarにマッピングするためのコードを追加することを考えていました。または、CDCarが準拠するアプリでの一般的な使用のために、Carのプロトコルを作成することもできます。これにはより一般的なアプローチがありますか?

+0

あなたの 'Car'オブジェクトのような余分なレイヤーを使うことで、' faulting'という最も強力なCoreDataメカニズムが緩くなることを覚えておいてください。 'Car'をフェッチするときには' Engine'エンティティ、 'Owner'エンティティなども取得する必要があります。関連するすべてのオブジェクトのグラフを作成する必要があります。 – psci

+0

ありがとうございます、はい、私はそれを考慮しませんでした。契約の破り者かもしれない。 –

答えて

1

パラレルエンティティを追加すると、デカップリングが実質的なメリットとなることが明らかでないほど複雑になります。

私がしたいのは、オンデマンドでインスタンスを作成するためのDataStoreクラスのファクトリメソッドを含めることです。 DataStoreコードの代わりにCarというコードを直接作成する代わりに、DataStoreの新しいcreateCarメソッドを呼び出します。 DataStoreは、有効なインスタンスを作成するために必要な処理を行い、結果を返します。これはおそらく、以外のインスタンスを作成しないため、addCarが必要ないことを意味します。

関連する問題