ActiveRecord | |
---|---|
înregistrare activă | |
Descris în Design Patterns | Nu |
Înregistrarea activă ( AR ) este un model de proiectare a aplicației descris de Martin Fowler în Patterns of Enterprise Application Architecture . AR este o modalitate populară de a accesa datele de baze de date relaționale în programarea orientată pe obiecte .
Schema Active Record este o abordare a accesării datelor dintr-o bază de date. Tabelul sau vizualizarea bazei de date este împachetat în clase. Astfel, o instanță de obiect este legată de un singur rând din tabel. După ce obiectul este creat, un nou rând va fi adăugat la tabel pentru salvare. Orice obiect încărcat își obține informațiile din baza de date. Când un obiect este actualizat, rândul corespunzător din tabel va fi, de asemenea, actualizat. Clasa wrapper implementează metode sau proprietăți accesorii pentru fiecare coloană dintr-un tabel sau vizualizare.
Acest model este utilizat în mod obișnuit de instrumentele de persistență a obiectelor și în maparea relațională a obiectelor ( ORM ). De obicei, relațiile de cheie străină vor fi reprezentate ca o instanță de obiect de tipul adecvat printr-o proprietate.
Implementările acestui model încalcă adesea Principiul responsabilității unice (SRP) prin combinarea atât a reprezentării, cât și a logicii interne a obiectului în sine, precum și a mecanismelor CRUD într-un singur obiect , astfel încât Active Record poate fi considerat un anti- model [1] . În alte cazuri, această afirmație este discutabilă, deoarece obiectul în sine, care implementează ActiveRecord, nu conține nicio logică de afaceri, dar oferă un tabel din baza de date, are un singur motiv pentru schimbare (schimbarea tabelului), ceea ce nu contrazice definirea principiului SRP [2 ] .
Să existe un tabel în baza de date . Pentru acest tabel, este creată o clasă AR specială , care este o reflectare (reprezentare) a tabelului, astfel încât:
Implementarea conceptului AR există în multe medii de dezvoltare pentru diferite limbaje de programare. De exemplu, dacă baza de date are un tabel cu partscâmpuri name(tip șir) și (tip număr) priceși șablonul Înregistrare activă este implementat în clasă Part, atunci următorul pseudocod:
parte = parte nouă() part.name = „Eșantion de parte” pret.part = 123,45 part.save()va crea o înregistrare nouă în tabel partscu valorile date și se va potrivi aproximativ cu comanda SQL
INSERT INTO parts ( nume , preț ) VALUES ( 'Piesă de probă' , 123 . 45 );Pe de altă parte, clasa poate fi utilizată pentru a interoga baza de date:
b = Part.find_first ("nume", "cutie de viteze")Acest cod va crea o nouă instanță a clasei Partpe baza datelor primei înregistrări găsite în tabel partscare are un câmp nameegal cu „cutie de viteze”.
Comanda SQL poate fi similară cu una dintre următoarele, în funcție de implementarea SQL într-o anumită bază de date:
SELECT * FROM parts WHERE nume = 'cutie de viteze' LIMIT 1 ; -- MySQL sau PostgreSQLsau
SELECT * FROM parts WHERE nume = 'cutie de viteze' si rownum < 2 ; -- Oracolsau
SELECTARE TOP 1 * DIN piese WHERE name = 'cutie de viteze' ; -- Microsoft SQL ServerExemple de implementare: Yii [3] și Kohana pentru PHP . De remarcat este cadrul CodeIgniter , care are încorporată o clasă ActiveRecord care este un constructor de interogare a bazei de date, dar nu este un exemplu de implementare a modelului Active Record.