2012-05-05 6 views
0

私のアプリケーションに永続性レイヤーを追加しようとしています。コアデータを移動することにしました。現在、すべてのモデルをエンティティにマップしていますが、これはかなりうまくいくようです。しかし、私の現在の実装では、私は "コレクション"(モデルの)と呼ばれるものを使用します。たとえば、ゲーム内にタイルスロットのコレクションがあります。コアデータ構造

このSlotsCollectionクラスには、findNextInSameRow()findAvailableSlot()などのメソッドがあります。コアデータで行ったことは、Gameエンティティを作成して、Slotエンティティとの関係に多くを追加したことです。スロットのコレクションはどのように私のロジックを置くことができるようにインスタンス化する必要がありますか?それとも、物事を構成する良い方法がありますか?私は、私はエンティティにすべての私のモデルを「移行」した後も

SlotManager* manager = [SlotManager alloc] initWithSlots:self.slots]; 
Slot* slot = [manager findAvailableSlot]; 

を初期化したときに私がスロットに私のゲームのエンティティと手内部の「管理者」を作ることができると思い、私は任意の属性を持っていないエンティティの多くを持っていますが、他のエンティティへの参照のみを保持します。私はコアデータを構造化するときに間違った考え方を使用しています。

答えて

0

コレクションを持つクラスには、そのコレクションのロジックが必要です。

AからBへの1対多の関係がある場合は、この関係に関するロジックをクラスAに入れます(必要に応じて)。

注:関係を反復処理する場合は、フォールディングの動作などに注意する必要があります。コアデータが実際のデータベース作業を行わなければならないときは、パフォーマンスが低下します。これは普通の古いSQLと同じです。 「ディスクに移動」する必要がない場合は、非常に高速です。フェッチリクエストを使用している場合は、常にデータベース作業を行い、物事は常に(比較的)高価になります。

+0

私はこのためのいくつかの標準的な解決策を探してきましたが、幸運なことではありませんが、私は包含エンティティの内部にすべてのロジックを入れたいと思っています。責任のある多くの重い実体。 –

+0

標準以外のものをやっているようですね。だからそれには標準的な解決策がありません。おそらく、あなたは正確にあなたが解決しようとしているものを詳しく説明できますか? –

関連する問題