ActiveRecord

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 25 septembrie 2019; verificările necesită 3 modificări .
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 ] .

Principiul general al funcționării Active Record

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:

Implementare

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 PostgreSQL

sau

SELECT * FROM parts WHERE nume = 'cutie de viteze' si rownum < 2 ; -- Oracol

sau

SELECTARE TOP 1 * DIN piese WHERE name = 'cutie de viteze' ; -- Microsoft SQL Server

Exemple 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.

Vezi și

Note

  1. Pablo's SOLID Software Development 8. - „Un bun anti-exemplu este modelul Active Record.” Acest model este în contradicție cu SRP. O entitate de domeniu gestionează persistența informațiilor sale. (Notă: nu este nimic în neregulă cu utilizarea Active Record; l-am folosit recent pe un site demo rapid și a funcționat perfect) În mod normal, ar trebui ca o metodă/acțiune de controler să treacă o entitate „hidratată” la o metodă a unui depozit instanță." Preluat la 31 iulie 2017. Arhivat din original la 29 august 2017.
  2. Serghei Protko (fesor). AR, prin definiție, o încalcă și este concepută să o încalce.  // https://habrahabr.ru/.+ Arhivat 31 iulie 2017.
  3. Exemplu de utilizare a Înregistrării active în cadrul Yii Arhivat la 10 februarie 2010 la Wayback Machine Arhivat la 10 februarie 2010.

Link -uri