Video: Galaxy Note9: How to use two apps at once with Galaxy Note9 and Samsung DeX 2024
Aktivt opptak er et enkelt mønster der klassen av minnemodellobjektet blir utvidet med metoder som håndterer utholdenheten til klassen. Følgende er et eksempel som bruker et bord som heter PERSONTABLE for å vedvare objekter av en Person-klasse i en relationsdatabase som datalager. Dette er grensesnittfilen til Person-klassen:
@interface Person: NSObject {// Modell attributter @private NSString * Navn; @private NSString * SSNo;} - (id) init; - (id) initWithOIDNameAndSSNo: (NSString *) OID: (NSString *) aName: (NSString *) aSSNo; - (NSString *) getName; - (NSString *) getSSNo; - (void) setName: (NSString *) aName; - (void) setSno: (NSString *) aSSNo; - (void) setAsRetired; // Andre operasjoner, hvis noen -d
Bare domenemetodene vises i dette grensesnittet. De ekstra metodene som trengs for utholdenhet, er definert i den vedvarende protokollen:
typedef enum {NEW, EXISTS, CHANGED, DELETED} STATUS; @protocol Persistable // Egenskaper som kreves av protokollen @required @property (copy) NSString * OID; // Unik ID i databasen @required @property (readonly) STATE state; + (id) findByOID: (NSString *) OID; - (tom) innsats; - (tom) oppdatering; - (void) delete; - (void) vedvarer; -d
Denne protokollen erklærer to nødvendige egenskaper:
-
Attributtet OID : Denne egenskapen inneholder den vedvarende IDen til objektet som unikt identifiserer objektet i en vedvarende datalager.
-
Attributtet state : Denne attributtet indikerer om objektet
-
ble nylig opprettet i minnet (tilstanden er NEW).
-
Eksisterer i databasen (staten er Eksisterende).
-
Ble modifisert i minnet etter å ha blitt hentet fra datalageret (staten er ENDRE).
-
Merkes for sletting (tilstand er slettet).
-
Protokollen erklærer da en samling metoder som klassen må gjennomføre. Du bruker klassemetoden FindByOid til å ta med et objekt fra databasen til minnet. (Slike metoder kalles finder metoder, og du kan ha mange forskjellige typer av dem, for eksempel et søkByName, findBySSNo og så videre.) Pseudokode for implementering av denne metoden i Person-klassen er vist her:
+ (id) findByOID: (NSString *) anOID {Person * returnPerson; // SQL-setning for å hente objekt fra databasen // Lagre hentet NAME og SSNO i lokale variabler aName og anSSNo … VELG NAVN, SSNO, fra PERSONTABLE der OID =: anOID INTO: aName,: anSSNo; aPerson = [[Personallokering] initWithOIDNameAndSSNo: anOID: anSSNo]; aPerson-> state = Eksisterende; returnerer returnPerson;}
Logikken til denne metoden er som følger:
-
Den innebygde SQL SELECT-setningen henter navnene og sosiale sikkerhetsnummerattributtene til objektet fra databasen og lagrer disse verdiene i de lokale variablene aName og anSSNo.
-
Disse variablene sammen med OID instantiate og initialisere et objekt av Person-klassen og returnere det.
Neste ser du implementeringen av de andre metodene fra Persistable protokollen, i Person-klassen. Vedvarende metode kalles når objektet må lagres i databasen, som vist her:
- (void) persist {// Kontroller objektets tilstand // Hvis det er et nytt objekt jeg. e. state = NEW call [self insert] // for å lage en oppføring i PERSONTABLE // Hvis state = EXISTS gjør ingenting // Hvis state = CHANGED, ring oppdatering for å oppdatere databasen // Hvis state - DELETED, ring slett for å fjerne informasjonen // i databasen}
Vedvarende metoden bruker tilstandsvariabelen til å anskaffe de riktige metodene for objektets utholdenhet.
-
Hvis objektet er nyopprettet, legges en plate inn i objektets tabell ved hjelp av innsatsmetoden, som vist her:
- (void) sett inn {INSERT IN PERSONTABLE (OID, NAME, SSNO) VÆRDIER: OID: Navn: SSNo …}
-
Hvis objektet hentes fra databasen og deretter endres i minnet, kalles oppdateringsmetoden.
- (ugyldig) oppdatering {UPDATE PERSONTABLE SET VALUES NAME =: Navn, SSNO =: SSNo WHERE OID =: OID …}
-
Hvis objektet hentes fra databasen og deretter merket for sletting i minne, slettes Metoden kalles.
- (void) delete {DELETE FROM PERSONTABLE WHERE OID =: OID; …}
Vær oppmerksom på at domenemetoder samt finnemetoder skal sette tilstanden til objektet på riktig måte. Som et resultat setter init initial tilstanden til objektet til NEW, findByOID setter staten til EKSISTERENDE, setAsRetired kan potensielt sette tilstanden til DELETED, setName og setSSNo setter staten til CHANGED (hvis den opprinnelige tilstanden var EKSISTERENDE), og så på.
Domenemetodene og persistensmetodene er derfor koblet til en viss grad.
Når du bruker Active Record til å lagre objekter i en relasjonsdatabase, kartlegger det vanligvis et objekt i en database tabell, med objektets vedvarende variabler kartlagt til felt i den tabellen.
Alle livscyklusstyringslogikken til objektet - bestemmer når du skal hente den fra databasen, om du vil tillate duplikateksempler i minnet som tilsvarer det samme objektet i databasen, når du skal lagre, når du skal slette objekter permanent - er søknadens ansvar