0

パーシスタンス レイヤーをアプリケーションに追加しようとしていますが、コア データを試してみることにしました。現在、すべてのモデルをエンティティにマップしていますが、これは非常にうまく機能しているようです。しかし、現在の実装では、(モデルの) 「コレクション」と呼ぶものを使用しています。たとえば、ゲーム内のタイル スロットのコレクションがあります。

この SlotsCollection クラスには、findNextInSameRow() findAvailableSlot() などのメソッドがあります。コア データで行ったことは、Game エンティティを作成し、Slot エンティティに多対多の関係を追加したことです。コレクションのクラスを定義する方法はありますかスロットをインスタンス化する必要があるので、その中にロジックを入れることができますか? または、物事を構造化するためのより良い方法はありますか。ゲームエンティティ内に「マネージャー」を作成し、初期化時にスロットを渡すことができると思います

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

また、すべてのモデルをエンティティに「移行」した後、属性を持たず、他のエンティティへの参照のみを保持するエンティティがたくさんあります。コアデータを構造化するときに間違った考え方を使用しているのではないかと少し心配しています。

4

1 に答える 1

0

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

A から B への 1 対多の関係がある場合、この関係に関するロジックをクラス A に配置し、場合によってはその一部をクラス B 内に配置します (必要に応じて)。

注: リレーションシップを反復処理している場合は、障害動作などに注意する必要があります。Core Data が実際のデータベース作業を行う必要があるときはいつでも、パフォーマンス ヒットが発生します。それは昔ながらの単純な SQL と変わりません。「ディスクに移動」する必要がない場合、処理は非常に高速です。フェッチ要求を使用している場合、常にデータベース作業を行うことになり、常に (比較的) コストがかかります。

于 2012-05-06T10:09:58.810 に答える