Vidéo: Comment utiliser l'application iCloud 2025
Active Record est un modèle simple, dans lequel la classe de l'objet modèle en mémoire est étendue avec des méthodes qui gèrent la persistance de la classe. Voici un exemple qui utilise une table nommée PERSONTABLE pour conserver les objets d'une classe Person dans une base de données relationnelle en tant que magasin de données. Voici le fichier d'interface de la classe Person:
@interface Personne: NSObject {// Attributs du modèle @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; // Autres opérations, le cas échéant -d
Seules les méthodes de domaine sont affichées dans cette interface. Les méthodes supplémentaires nécessaires pour la persistance sont définies dans le protocole Persistable:
typedef enum {NEW, EXISTS, CHANGED, DELETED} ETAT; @protocol Persistable // Propriétés requises par le protocole @required @property (copie) NSString * OID; // ID unique dans l'état STATE @required @property (readonly) de la base de données; + (id) findByOID: (NSString *) OID; - (vide) insérer; - (void) mise à jour; - (vide) supprimer; - (vide) persister; -d
Ce protocole déclare deux attributs obligatoires:
-
L'attribut OID : Cet attribut contient l'identifiant persistant de l'objet qui identifiera de façon unique l'objet dans un magasin de données persistant.
-
L'attribut état : Cet attribut indique si l'objet
-
a été nouvellement créé en mémoire (état NEW).
-
Existe dans la base de données (l'état est EXISTING).
-
A été modifié en mémoire après avoir été récupéré dans le magasin de données (l'état est MODIFIÉ).
-
est marqué pour la suppression (l'état est SUPPRIMÉ).
-
Le protocole déclare ensuite une collection de méthodes que la classe doit implémenter. Vous utilisez la méthode de classe FindByOid pour mettre un objet de la base de données en mémoire. (De telles méthodes sont connues sous le nom de méthodes finder et vous pouvez en avoir plusieurs sortes, comme findByName, findBySSNo, etc.). Le pseudocode pour implémenter cette méthode dans la classe Person est affiché ici:
+ (id) findByOID: (NSString *) anOID {Personne * renvoiePerson; // Instruction SQL pour extraire l'objet de la base de données // Enregistrer NAME et SSNO récupérés dans les variables locales aName et anSSNo … SELECT NAME, SSNO, à partir de PERSONTABLE où OID =: anOID INTO: aName,: anSSNo; aPerson = [[Person alloc] initWithOIDNameAndSSNo: anOID: anSSNo]; aPerson-> state = EXISTANT; returnPourant;}
La logique de cette méthode est la suivante:
-
L'instruction SQL SELECT incorporée récupère les attributs du nom et de la sécurité sociale de l'objet dans la base de données et enregistre ces valeurs dans les variables locales aName et anSSNo.
-
Ces variables avec l'OID instancient et initialisent un objet de la classe Person et le retournent.
Ensuite, vous voyez l'implémentation des autres méthodes du protocole Persistable, dans la classe Person. La méthode persist est appelée chaque fois que l'objet doit être enregistré dans la base de données, comme indiqué ici:
- (void) persistent {// Vérifier l'état de l'objet // S'il s'agit d'un nouvel objet i. e. state = NEW appel [self insert] // pour créer une entrée dans PERSONTABLE // Si state = EXISTS ne fait rien // If state = CHANGED, appelle update pour mettre à jour la base de données // If state - DELETED, appelle delete pour supprimer les informations // dans la base de données}
La méthode persist utilise la variable d'état pour appeler les bonnes méthodes pour la persistance de l'objet.
-
Si l'objet est nouvellement créé, un enregistrement est inséré dans la table de l'objet en utilisant la méthode insert, comme indiqué ici:
- (void) insert {REPLACE INTO PERSONTABLE (OID, NOM, SSNO) VALEURS: OID: Nom: SSNo …}
-
Si l'objet est extrait de la base de données puis modifié en mémoire, la méthode de mise à jour est appelée.
- (void) update {METTRE À JOUR LES VALEURS SET PERSONNABLES NOM =: Nom, SSNO =: SSNo OERE OID =: OID …}
-
Si l'objet est récupéré de la base de données et marqué pour suppression en mémoire, la suppression méthode est appelée.
- (void) delete {SUPPRIMER DE PERSONNABLE O WH OID =: OID; …}
Notez que les méthodes de domaine ainsi que les méthodes finder doivent définir l'état de l'objet de manière appropriée. En conséquence, init définit l'état de l'objet sur NEW, findByOID définit l'état sur EXISTING, setAsRetired peut potentiellement définir l'état sur DELETED, setName et setSSNo définit l'état sur CHANGED (si l'état d'origine était EXISTING), et ainsi sur.
Les méthodes de domaine et les méthodes de persistance sont donc couplées dans une certaine mesure.
Lorsque vous utilisez Active Record pour stocker des objets dans une base de données relationnelle, il associe généralement un objet à une table de base de données, les variables persistantes de l'objet étant mappées aux champs de cette table.
Toute la logique de gestion du cycle de vie de l'objet - décider quand l'extraire de la base de données, autoriser une instance dupliquée en mémoire correspondant au même objet dans la base de données, quand sauvegarder, quand supprimer définitivement des objets - les responsabilités de l'application.
