フレームワークは次のようなコンストラクタでエンタープライズオブジェクトを生成します。
public MyClass(
EOEditingContext anEditingContext,
EOClassDescription classDescription,
EOGlobalID globalID
)
このコンストラクタは、エンタープライズオブジェクトクラスの新しいインスタンスを返すべきです。 引数を使って必要な初期化を行うことができます。 Javaクライアントとサーバで生成されるエンタープライズオブジェクトクラスには、このコンストラクタが必要です。
エンタープライズオブジェクトは、生成後に awake... メソッドが実行されます。
実行されるメソッドは、オブジェクトがデータベースからフェッチされたかアプリケーション内で生成されたかによって変わります。
アプリケーション内で生成された場合、 awakeFromInsertion が実行されます。
これらのメソッドをオーバーライドすると、生成されたオブジェクトを元にしてプロパティの初期値を初期化することができます。
フレームワークがアプリケーションを管理するには、エンタープライズオブジェクトは状態が変更されたら監視者に通知しなければなりません。
インスタンス変数などの状態が変更される前に、オブジェクトは willChange を実行して通知します。
このメソッドは、実行したオブジェクトがこれから変更されることを監視者に通知します。
オブジェクトの主な監視者は、オブジェクトが所属するEOEditingContextです。
EOEditingContextはEOObjectStoreのサブクラスであり、メモリ中のオブジェクトを管理します。
オブジェクトの挿入、削除、更新を追跡し、適切な永続ストアに変更を知らせます。
オブジェクトの所属するEOEditingContextは、オブジェクトの editingContext メソッドで取得できます。
EOEnterpriseObjectインターフェースの一部のメソッドは、オブジェクトのプロパティについての情報を提供します。
オブジェクトの classDescription メソッドはクラスの情報を持つオブジェクトを返します。
このオブジェクトに関してはEOClassDescriptionを参照してください。
エンタープライズオブジェクトから直接実行できるメソッドには次のようなメソッドがあります。
マッピングされているエンティティの名前を返す entityName 、属性とリレーションシップを含むすべてのプロパティの名前を返す allPropertyKeys、同様にすべての属性名前を返す attributeKeys があります。
リレーションシップに関する情報を返すメソッドもあります。
toOneRelationshipKeys と toManyRelationshipKeys はリレーションシップの名前を返します。
isToManyKey によって、リレーションシップ名がどちらのメソッドに含まれるか決まります。
deleteRuleForRelationshipKey は、リレーション先のオブジェクトが削除されたときにどう振る舞うのかを示します。
同様に ownsDestinationObjectsForRelationshipKey は、リレーション先にオブジェクトが追加されるか、取り除かれたときにどう振る舞うのかを示します。
もうひとつのメソッド classDescriptionForDestinationKey は、リレーション先のオブジェクトのEOClassDescriptionを返します。
key-value コーディングのメソッドは、プロパティの詳細を知ることなく、オブジェクトのプロパティにアクセスする手段を定義しています。
しかし次のような場合のために、フレームワークはオブジェクトの状態をそのまま保存しておく必要があります。
オブジェクトの変更を戻したり、変更された値を比較したり、変更されたレコードを保持することがあります。
スナップショットはこの処理を行うメソッド、すべてのプロパティを取得・設定するメソッド、処理に応じて必要な変換を行うメソッドを提供します。
スナップショットはすべてのプロパティを含む辞書であり、 updateFromSnapshot ではスナップショットをオブジェクトのプロパティに設定します。
スナップショットは、未コミットの変更をコミット済みの変更にマージするのに使われます。
その処理で使われるメソッドは changesFromSnapshot と reapplyChangesFromDictionary です。
EOEnterpriseObjectのメソッドの中には実装・オーバーライドするためのものがあり、一部はフレームワークで使われるように定義されています。 フレームワーク内部で使われる多くのメソッドは、アプリケーションから実行することはほとんどありません。 次の表はカスタムエンタープライズオブジェクトでよく実装・オーバーライドするメソッドを強調表示しています。
| 生成 | |
MyClass( EOEditingContext,
EOClassDescription, EOGlobalID) |
実装されていれば、このメソッドでエンタープライズオブジェクトを生成します。 |
| awakeFromFetch | オブジェクトのフェッチ後に初期化を行います。 |
| awakeFromInsertion | メモリ中にオブジェクトを生成した後に初期化を行います。 |
| Key-Value コーディング: プロパティとリレーションシップへのアクセス | |
| setKey | key のプロパティに値を設定します。 |
| key | key のプロパティから値を取得します。 |
| addToKey | key のリレーションシッププロパティにオブジェクトを追加します。 |
| removeFromKey | key のプロパティからオブジェクトを取り除きます。 |
| handleTakeValueForUnboundKey | takeValueForKey でプロパティを検索できないときに実行されます。 |
| handleQueryWithUnboundKey | valueForKey でプロパティを検索できないときに実行されます。 |
| unableToSetNullForKey | オブジェクトでないプロパティに null を設定しようとしたときに実行されます。 |
| 検証 | |
| validateKey | key のプロパティの値を検証します。 |
| validateForDelete | オブジェクトを削除する前に、すべてのプロパティを検証します。 |
| validateForInsert | オブジェクトを挿入する前に、すべてのプロパティを検証します。 |
| validateForSave | オブジェクトを保存する前に、すべてのプロパティを検証します。 |
| validateForUpdate | オブジェクトを更新する前に、すべてのプロパティを検証します。 |