Domanda

Sto armeggiando con CodeIgniter e ho incontrato Active Records per la prima volta. All'inizio l'ho respinto come qualcosa per le persone che non sanno davvero come scrivere SQL. Ora mi rendo conto che la mia analisi era difettosa e che Active Records sono piuttosto importanti, specialmente in Rails.

Ma quale scopo hanno gli Active Records? Estrarre da diverse individualità RDBMS. Se è così, ho pensato che non è quello che SQL dovrebbe fare. Inoltre, qual è la migliore pratica, dovrei usarle?

Grazie in anticipo

È stato utile?

Soluzione

Il modello di record attivo " sta diventando una parte fondamentale della maggior parte dei framework di programmazione. Rende più semplici da svolgere le attività CRUD (Crea, Aggiorna, Leggi, Elimina) più semplici. Ad esempio, anziché dover scrivere molti SQL per inserire, aggiornare ed eliminare molti oggetti dati comuni e semplici, consente di assegnare semplicemente i valori all'oggetto dati ed eseguire un comando, ad es. $ object- > save (), l'SQL è compilato ed eseguito per te.

La maggior parte dei framework implementa anche relazioni di dati all'interno dei rispettivi modelli di Record attivi che possono semplificare notevolmente l'accesso ai dati relativi al proprio oggetto. Ad esempio, in CodeIgniter, se hai specificato che una categoria "ha molti" I prodotti quindi dopo aver caricato l'oggetto Categoria dal database, è possibile elencare i suoi prodotti figlio con una semplice riga di codice.

foreach ($category->products as $product) {
  echo $product->name;
}

Un altro vantaggio di Active Record è, come dici tu, che rende il tuo codice facilmente trasportabile su diverse piattaforme di database (purché il framework che stai usando abbia un driver per il database che hai scelto) e anche se questo non è probabile che sembra importante in questo momento, il mio ha un valore maggiore in un secondo momento se la tua applicazione diventa popolare!

Speriamo che questo abbia aiutato. Wikipedia descrive bene Active Record ( http://en.wikipedia.org/wiki/Active_record_pattern ) e anche i documenti CodeIgniter. Personalmente, utilizzo KohanaPHP ( http://www.kohanaphp.com ) che è un fork PHP5 di CodeIgniter e Trovo che i suoi modelli ORM siano molto utili!

Altri suggerimenti

Active Record è un modello di progettazione per l'accesso ai dati ...

Al momento ci sono due principali modelli di design che mi sembra di incontrare per quanto riguarda l'accesso ai dati: ActiveRecord e il modello di repository

Record attivo

I tuoi oggetti contengono metodi per mantenere il loro stato su un DB (o altro meccanismo di persistenza), quindi:

Potresti avere un oggetto Cliente.

L'oggetto cliente avrà una serie di metodi come Customer.Save () ;, Customer.Get (int id); e altri.

Questi metodi non hanno davvero nulla a che fare con un cliente nel mondo reale. Riguardano davvero l'infrastruttura della tua applicazione.

Modello di repository

Nel modello di repository, l'oggetto cliente sarebbe un oggetto POCO o stupido. Ha solo metodi e proprietà di cui ha davvero bisogno per rappresentare un cliente (cose come nome, indirizzo e-mail, ordini della lista, ecc.)

Quando vuoi mantenere il cliente, devi semplicemente passarlo al tuo repository

Repository.Save (MyCustomer).

Il modello di record attivo è rapido e facile da lavorare. Sfortunatamente, ingombra il tuo modello di dominio con questi metodi che in realtà non hanno nulla a che fare con un cliente. Ciò rende leggermente più difficile mantenere il modello di dominio nel tempo.

Per molte situazioni è molto appropriato usare un modello di record attivo. Ad esempio - Se sto scrivendo un'app abbastanza semplice che probabilmente non cambierà molto, probabilmente accenderei SubSonic e genererei un mio Record attivo DAL. Codificherei il mio codice aziendale entro 20 minuti e tutto il materiale DB è già curato.

Se, d'altra parte, sto modellando un dominio particolarmente complesso, con un'elevata suscettibilità al cambiamento, preferirei mantenere puliti i miei modelli di dominio e implementare un modello di repository con nHibernate o simile ...

È passato molto tempo dall'ultima volta che ho implementato il mio accesso ai dati tramite ADO.Net e non lo consiglio davvero ora, ci sono così tanti fantastici strumenti di accesso ai dati disponibili.

Potrei dare la mia opinione su questo modello, ma la migliore copertura di Active Record (e molti altri) è Patterns di Enterprise Application Architecture di Martin Fowler.

Dal capitolo 10:

  

Record attivo

     

Un oggetto che avvolge una riga in a   tabella di database o vista, incapsula   l'accesso al database e aggiunge il dominio   logica su tali dati.

     

Un oggetto trasporta sia dati che   comportamento. Gran parte di questi dati è   persistente e deve essere archiviato in a   Banca dati. Record attivo utilizza di più   approccio ovvio, mettendo accesso ai dati   logica nell'oggetto dominio. Per di qua   tutte le persone sanno leggere e scrivere   i loro dati da e verso il database.

     

...

     

Quando usarlo

     

Active Record è un buono   scelta per la logica del dominio che non lo è   complesso, come crea, legge,   aggiornamenti ed eliminazioni. Derivazioni e   convalide basate su un singolo record   funziona bene in questa struttura.

     

...

     

Il record attivo ha il primario   vantaggio della semplicità. È facile   costruire Active Records, e lo sono   facile da capire. Il loro primario   il problema è che funzionano bene solo se   gli oggetti Active Record corrispondono   direttamente alle tabelle del database: an   schema isomorfo.

     

Se la tua azienda   la logica è complessa, presto lo vorrai   usa il tuo oggetto diretto   relazioni, collezioni,   eredità e così via. Questi no   mappare facilmente su Active Record e   aggiungendoli a pezzi diventa molto disordinato.   Questo è ciò che ti porterà a utilizzare i dati   Mapper invece

Se non altro, semplifica la scrittura di query. Trovo che la normale sintassi di MySQL sia soggetta a errori di sintassi (nessun errore tranne il mio) e con la sintassi del record attivo CI questo accade raramente a me.

Active Record è una delle funzionalità più interessanti di CI IMHO

Il record attivo è un ORM - Hai dato un'occhiata alla tecnica di mappatura di relazioni tra oggetti? Penso che se capisci ORM, inizierai a vedere i vantaggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top