【iPhoneアプリ開発】図がわかりやすいCore Data Class Overviewを日本語訳したよ!前編(Core Data入門)
Core Dataフレームワークはココアデベロッパーの方たちにたくさんの新しい機能を提供してくれます。しかし、このフレームワークでは、膨大なクラス構造をつくることなく機能を使えるように設計されています。およそ1ダースほどのキークラスがあり、これらはドキュメントの中でModel,Runtime,Queryに分けられています。
(written / illustrated by Scott Stevenson) //←作者さんです。ぼくは訳しただけ。
使用するCore Dataのクラスについて
1. Managed Object Modelにはアプリケーションのデータタイプの詳細が記述されているものが含まれています。
2. Maneged Object Contextこそ、本当に魔法が生まれるところです。Contextはすべてのユーザーデータをすっきりと格納したり取り出したりします。Contextがデータの変更に気がつけば、そのデータを使うどんなものでもCocoa Bindingsからアップデートされます。
3. Persisitent Store Coordinatorは読み書きしているデータファイルの低いレベルの側面を扱います。これはある格納スペースにたくさんのファイルを映し出します。ほとんどのアプリケーションは直接Persistent Store Coordinatorと接触を持つ必要はありません。
4. Standard data objectsはManaged Objectsに取ってかわられ、Managed ObjectsはManaged Object Contextと結びついています。NSManagedObjectをそのまま使うこともできれば、それぞれのデータにあわせた独自のサブクラスを提供することもできます。
Model Classes
従来のCocoaアプリケーションには通常、モデルを構成するデータオブジェクトのトップダウンツリーがあります。Core Dataアプリケーションでは、オブジェクトの”ネットワーク”にほぼ似たものとなっています。
Core Dataのモデルクラス使うこのネットワークの見取り図をつくってみれば、Maneged Object Modelについて解き明かされることになるでしょう。
多くのモデルクラスが”Description"で終わっています。これはまさに、エンティティやプロパティに関する、データタイプについての記述、お互いの関係性を考えるのに役立ちます。
Managed Object Model (NSManagedObjectModel)
Managed Object Modelはアプリケーションのデータタイプの詳細なアウトラインです。ひとつのCore Dataアプリケーションには少なくともひとつのModelがあり、多様なModelが実行時に一緒に統合されることもあります。たいていXcodeの視覚的なモデリングツールを使いたいでしょうが、コードでModelをつくることも可能です。
ModelはEntityでできていて、それらはPropertyを持っています。Entityはお互いがRelationshipによってつながっています。
Modelにはまた、自身がもつデータに対してルールがあります。たとえば、それぞれのpostにauthorをもつアプリケーションにルールを加えることもあるでしょう。Core Dataではコードを変えることなく、このルールを強制することができます。
Entity(NSEntityDescription)
EntityはManaged Object Modelを構成する最も基本的なブロックです。これは、authorあるいはmailboxのような、あなたが格納したいものの記述です。EntityはCore Dataによって「管理されることになるもの」を定義するのであって、「どのように管理されるか」を定義するとは限りません。
もしあなたがCocoaプログラマーなら、各データタイプのインスタンス変数をもつ改造したクラスを作ることに慣れていると思います。Core Dataでは、PropertyをもつEntityをつくり、クラスに「マップ」します。
デフォルトでは、それぞれのEntityはNSManagedObjectにマップされています。NSManagedObjectは、カスタムしたインスタンス変数やアクセサなしでデータを扱うためにEntityを使用します。Entityは違うクラスにマップされることもありますが、すべてのデータクラスはNSManagedObjectから派生しなくてはなりません。
データの記述がクラスの実装とは分かれているので、たくさんのEntityを同じクラスにいれることができ、プロジェクトにおけるコードの量を全体的におさえることができます。ある意味、それぞれのEntityはNSManagedObjectによってあやつられながら多様な役割を持っているのです。
ひとつのEntityはabstractになることもでき、その場合、決して直接managed objectにくっつくことはありません。Entityはまた親からPropertyを引き継ぐこともできます。たとえば、あるSmartMailboxはMailboxのサブEntityになるかもしれません。
前編終わり。
ソース:http://cocoadevcentral.com/articles/000086.php
======================
当ブログ管理人のツイッターはこちら
◎フォローしてくださると泣いて喜びます!ツイッター上で当ブログの質問などにもできるだけお答えしますし、役に立つiPhoneアプリ開発情報もつぶやきます。個人的なご依頼(たとえば、プログラミングの家庭教師、Skypeレッスンをしてくれないか、iPhoneアプリ開発の勉強会ってやってるの、とかですね)でもかまいません。
■スカイプレッスンについて
開発をしているとその都度ぶつかる問題があると思いますが、検索で調べてもなかなかわからない、あるいは調べても非常に時間がかかる場合があると思います。開発者のみなさんもお忙しいと思いますので、私のレッスンを受けながら開発を進めていただけると、大幅にお時間を短縮できます。加えて、iPhoneアプリ開発の基礎、応用が身につき、今後の開発もスムーズに進められます。
お問い合わせはツイッター、またはhiyoshimarukoアットマークgmail.comまでお願いします。(アットマークを@にしてください)お待ちしております!