ビデオ: MaaS360 Open Mic: MaaS360 Enrollment Types, 16 October 2018 2025
アクティブレコード は、メモリ内モデルオブジェクトのクラスがクラスの永続性を処理するメソッドで拡張される単純なパターンです。以下は、PERSONTABLEという名前の表を使用して、リレーショナル・データベース内のPersonクラスのオブジェクトをデータ・ストアとして永続化する例です。これは、Personクラスのインタフェースファイルです。
@interface Person:NSObject {//モデル属性@private NSString * Name; @private NSString * SSNo;} - (id)init; - (id)initWithOIDNameAndSSNo:(NSString *)OID:(NSString *)aName:(NSString *)aSSNo; - (NSString *)getName; - (NSString *)getSSNo; - (void)setName:(NSString *)aName; - (void)setSsno:(NSString *)aSSNo; - (void)setAsRetired; //その他の操作(存在する場合)-d
このインタフェースにはドメインメソッドのみが表示されます。永続性に必要な追加のメソッドは、Persistableプロトコルで定義されています。
<! - 1 - >typedef enum {NEW、EXISTS、CHANGED、DELETED}状態; @protocol Persistable //プロトコルが必要とするプロパティ@required @property(コピー)NSString * OID; //データベース内の一意のID @required @property(読み取り専用)STATE状態。 +(id)findByOID:(NSString *)OID; - (void)insert; - (void)update; - (void)delete; - (void)persist;
-
OID 属性: この属性は、永続データストア内のオブジェクトを一意に識別するオブジェクトの永続IDを保持します。
-
属性: この属性は、オブジェクト がメモリ内に新しく作成されたかどうかを示します(状態はNEWです)。 データベースに存在します(状態は存在しています)。
-
データストアからフェッチされた後にメモリ内で変更されました(状態はCHANGED)。
-
削除マークが付いています(状態は削除されています)。次に、プロトコルは、クラスが実装する必要があるメソッドのコレクションを宣言します。クラスメソッドFindByOidを使用して、オブジェクトをデータベースからメモリに移動します。 (そのようなメソッドは
-
finder
-
メソッドと呼ばれ、findByName、findBySSNoなどのような多くの異なる種類を持つことができます。)このメソッドをPersonクラスで実装するための擬似コードは次のとおりです。
-
<! - 3 - > +(id)findByOID:(NSString *)anOID {Person * returnedPerson; //データベースからオブジェクトを取得するためのSQLステートメント//取得したNAMEおよびSSNOをローカル変数aNameおよびanSSNoに保存します。OID =:anOID INTO:aName、:anSSNo;で、PERSONTABLEからNAME、SSNOを選択します。 aPerson = [[Person alloc] initWithOIDNameAndSSNo:anOID:anSSNo]; aPerson-> state = EXISTING;このメソッドのロジックは次のとおりです。 埋め込みSQL SELECT文は、オブジェクトのNameおよびSocial Securityの数値属性をデータベースから取得し、これらの値をローカル変数aNameおよびanSSNoに保存します。
<! - 1 - >これらの変数は、OIDとともに、Personクラスのオブジェクトをインスタンス化して初期化し、それを返します。
次に、PersonクラスのPersistableプロトコルから他のメソッドの実装を確認します。
-
- (void)persist {//オブジェクトの状態をチェックする//新しいオブジェクトである場合i。オブジェクトがデータベースに保存される必要がある場合は、persistメソッドが呼び出されます。 e。 state = NEW call [self insert] // PERSONTABLEにエントリを作成する// state = EXISTSが何もしない// state = CHANGEDの場合、データベースを更新するためにupdateを呼び出す//状態がDELETEDの場合は、deleteを呼び出して情報を削除する//データベース内}}
persistメソッドは、オブジェクトの永続性に適切なメソッドを呼び出すために状態変数を使用します。 -
<!新しいオブジェクトが作成された場合は、以下のようにinsertメソッドを使用してオブジェクトのテーブルにレコードが挿入されます。
- (void)insert {REPLACE INTO PERSONTABLE(OID、NAME、 SSNO)値:OID:名前:SSNo …}
オブジェクトがデータベースから取得され、メモリ内で変更された場合、更新メソッドが呼び出されます。オブジェクトがデータベースから検索され、メモリ内の削除マークが付いている場合は、そのオブジェクトを削除します。
- (void)update(UPDATE PERSONABLE SET VALUES NAME =:名前、SSNO =:SSNo WHERE OID =:OID …}メソッドが呼び出されます。
<! - 3 - >-
- (void)delete {OID = OIDのどこかから削除します。 …}
ドメインメソッドとファインダメソッドは、オブジェクトの状態を適切に設定する必要があることに注意してください。その結果、initはオブジェクトの状態をNEWに設定し、findByOIDは状態をEXISTINGに設定し、setAsRetiredは状態をDELETED、setName、setSSNに設定して状態をCHANGEDに設定することができます(元の状態がEXISTINGの場合)。に。
-
<! - 1 - >
したがって、ドメインメソッドと永続メソッドは、ある程度結合されています。
-
Active Recordを使用してリレーショナルデータベースにオブジェクトを格納する場合、通常、オブジェクトの永続変数をそのテーブルのフィールドにマップしてオブジェクトをデータベーステーブルにマップします。
オブジェクトのライフサイクル管理ロジックは、いつデータベースからフェッチするか、データベース内の同じオブジェクトに対応するメモリ内に重複インスタンスを許可するか、いつ保存するか、オブジェクトを永久に削除するかなどを決定します。アプリケーションの責任。
