管理オブジェクトモデル
2007/03/30 (Fri) 22:07:46 JST
伝統的なアプリケーションデータモデルでは、変数や適当なアクセサメソッドを持つクラスを手動で定義していました。 Core Dataフレームワークを使うと、エンティティモデルオブジェクトの抽象的な定義を提供する管理オブジェクトモデルを生成することができます。 エンティティ - リレーションシップモデルとして知られているこのモデルは、エンティティとリレーションシップをデザインするのに十分な開発環境である、Xcodeのデータモデルデザインツールを使って定義します。 アプリケーションのデータ型とリレーションシップをつなぐ青い線が実際の様子です。
エンティティ - リレーションシップモデリングはデータ構造を記述する方法で、オブジェクト指向のシステムにマッピングすることもできます。 この方法がデータベースの世界に登場してから、(もしかしたらあまり親しみのない概念かもしれませんが)次の概念を用いた技術が生まれてきました。
- エンティティ、データモデル中の情報の一単位です。
- 属性、エンティティのコンポーネントです。 大抵は次のような単純なスカラー値です。int, float, double, char * などの C のデータ型, NSPoint; NSString, or NSNumber などの基本的なクラスのインスタンス。
- リレーションシップ、エンティティからエンティティへの参照。 1対1や1対多と同様、リレーションシップは任意にも必須にもなります。
- プロパティ、属性とリレーションシップの総称。
例えば図書館の蔵書を管理するアプリケーションは、本に関する Book エンティティを持つでしょう。 このエンティティは属性にタイトルとISBN番号を持ち、また他のエンティティへのリレーションシップを持ちます。 リレーション先のエンティティには、著者に関する Person エンティティや図書館の本をグループ分けする Collection エンティティなどがあります。 Personエンティティはファーストネームとラストネームの属性を持つでしょう。
以上のコンセプトは、オブジェクト指向プログラミングで使われるクラスとプロパティに近い点があります。 ただし、エンティティ - リレーションシップモデリングはモデルデータとデータ間の関係に焦点を置いており、振る舞いには関与しません。
エンティティと管理オブジェクト
管理オブジェクトモデルの各エンティティの定義には、エンティティ名とランタイムでエンティティを表すのに使うクラス名が必要です。 デフォルトでは NSManagedObject クラスが使われますが、このクラスのサブクラスも使うことができます。 NSManagedObject クラスはCore Dataフレームワークが要求する機能を実装しており、どんなエンティティに対しても使うことができます。 このクラスには属性とリレーションシップを値に持つ辞書のような役割があり、Key-Value Coding (KVC) で値を設定したり、Key-Value Observing (KVO) で監視することができます。 KVCとKVOにより、管理オブジェクトをCocoaバインディングでシームレスに扱うことができます。
NSManagedObject が必要な機能を一通り揃えていることに気付くでしょう。 特定のエンティティに特別に属性や振る舞いを持たせたい場合のみ、サブクラスを実装すればいいのです。
Inverse Pages: CoreData基礎:概要 CoreData基礎 CDPGIntroduction CoreDataFAQ CoreData用語集 DevelopingWithCoreData 管理オブジェクトコンテキストと永続用ストア 管理オブジェクトの生成、フェッチ、更新 CoreData概要