4

Core Data を使用していくつかの iOS アプリケーションを開発してきましたが、これは優れたフレームワークでした。ただし、複数のプラットフォーム間で多かれ少なかれオブジェクトを分散 (同期) しているという問題に遭遇しました。Web/データベース サーバー バックエンドとモバイル デバイス。

今までは問題にならなかったのですが、Core Data で使用されるデータ モデルの静的な性質に少し行き詰まりました。基本的に要求されているのは、サーバー上でフォームを作成し、デバイスに伝達できる動的フォーム システムです。次のようなセット数のテーブルでこれを実行する手法を認識しています。

  • フォーム テーブル
  • フィールド テーブル
  • フォーム テーブルのインスタンス
  • インスタンス値テーブル

すべてをリンクするだけです。しかし、私が疑問に思っているのは、より動的なオブジェクト グラフを可能にするコア データ (SQLite データベースと直接対話する上記の何か) に代わるシステムがあるかどうかです。実行時にスキーマを変更するためのオプションがあれば、標準の ORM でさえ良いでしょう。このルートをたどりたい主な理由は、(ローカルデバイスまたはサーバー上で) インスタンス値テーブルがエントリで爆発したくないという意味でのパフォーマンスのためです。

私の他のオプションは、iOS デバイスに静的スキーマ (オブジェクト グラフ) を配置し、サーバー側に変換レイヤーを配置して、正しいオブジェクトを取得し、プロパティを設定して正しいテーブルに保存することです。次に、デバイスが同期されると、逆のことが行われ、インスタンスに分割されます。これにより、サーバーのインスタンス値テーブルが肥大化するのを防ぐことができますが、デバイスでは依然として問題になる可能性があります。

任意の提案をいただければ幸いです。

4

2 に答える 2

1

フォームとフィールドに特定のテーブル/エンティティを使用し、それぞれのインスタンスにエンティティを使用することをお勧めします。ORM スキーマが頻繁に発生する場合、その場で ORM スキーマを操作しようとすることは、一般的には良い考えとは思えません。

ただし、スキーマがあまり頻繁に変更されない場合は、おそらくコア データで変更できます。NSManagedObjectModelを作成する前に、プログラムで を作成および/または操作できますNSManagedObjectContext。また、モデルを更新してコンテキストとストアを再作成する必要がある場合に、古いモデルに保存されているデータを保持できるように、移行ロジックを作成することもできます。

これらの他の SO 投稿が役立つ場合があります。

于 2011-07-21T13:45:23.837 に答える
0

実際に何をモデル化するのかを慎重に検討する必要があります。

(1) 実際の「フォーム」、つまり UI 要素、(2) 任意の数の UI バージョンで表示される可能性のあるデータ、firstName または (3) 両方をモデル化していますか?

フォームをモデル化するように設計されたデータ モデルには、次のようなエンティティがあります。

Form{
  name:string
  fields<-->Field.form
}

Field{
  width:number
  height:number
  xPos:number
  yPos:number
  label:sting
  nextTab<-->Field.priorTab
  priorTab<-->Field.nextTab
  form<<-->Form.fields
}

これを使用して、ユーザー インターフェイスに表示されるフォームに関するデータを保存します。次に、最初のデータ モデルによって構成された UI 要素に入力される実際のデータを格納するために、別のエンティティとおそらく別のモデルを用意します。

Core Data を使用して、実際に何をモデル化しているかを知る必要があるだけのモデル化を行うことができます。

于 2011-07-22T18:39:40.290 に答える