Interacțiunea dintre o aplicație software și o bază de date nu a fost întotdeaună atât de ușoară ca acum.
Dacă nu ai foarte multă experiență, poate nu ți se pare nici acum atât de ușor să-ți conectezi aplicația la o bază de date, dar crede-mă, e absolut trivial.
Nu contează dacă scrii cod în C#, JavaScript, Java, Python, sau altele, legarea aplicației la o bază de date se face relativ ușor datorită a ceea ce poartă numele de ORM - adică prescurtarea de la Object Relational Mapper.
Problema conversiei datelor
Pornesc explicația a ceea ce face un ORM din partea opusă. Și anume, ce ar trebui să faci tu ca developer în lipsa lor.
Poate te gândești că citirea datelor dintr-o bază de date de către o aplicație software e un proces destul de direct și ușor de înțeles, dar nu e chiar așa.
Exemplele pe care urmează să le dau se referă la baze de date relaționale, dar se aplică la fel de bine și pentru non-relaționale.
Toate datele cu care lucrează aplicația ta sunt reprezentate de tabele alcătuite din multiple coloane cu multiple tipuri de date.
Deși în termeni tehnici atât baza de date, cât și codul aplicației tale utilizează aceleași tipuri de date, ele sunt reprezentate diferit în fiecare parte.
Asta înseamnă că de fiecare dată când datele trec pragul dintr-o parte în alta trebuie convertite pentru asigurarea integrității lor.
Hai să-ți dau un exemplu.
In majoritatea limbajelor de programare tipul de dată pentru reprezentarea unui șir de caractere alfanumerice se numește string
.
Într-o bază de date relațională în schimb, echivalentul acestui string
poartă numele de varchar
.
Și ăsta e motivul pentru care avem nevoie de un mecanism care să facă trecerea dintr-o parte în cealaltă la fiecare interacțiune a aplicației noastre cu baza de date.
Ce trebuie să faci în lipsa unui ORM
Această conversie se făcea manual de către developeri până la apariția uneltelor de tip ORM.
Adică primeai datele de pe coloane într-o înșiruire ordonată în funcție de coloanele din tabelă în baza de date.
Tu, programatorul, trebuia să știi ordinea coloanelor și tipul din baza de date și să-l mapezi la tipul corespondent din cod.
Cred că de-aici îți poți imagina valul de potențiale probleme care pot să apară.
Mai mult de atât, trebuia să faci tot felul de acțiuni suplimentare pentru deschiderea și închiderea conexiunii cu baze date, altfel puteai avea și aici probleme.
Ce încurcătură!
Ce este și ce face un ORM
Acum că ți-am explicat ce făceau programatorii înainte de era uneltelor ORM, probabil poți să intuiești acum ce sunt și la ce te ajută.
Uneltele ORM fac toată maparea tuturor datelor pentru tine, deschid și închid conexiuni și mai mult decât atât, majoritatea sunt extrem de performante, deci chiar și aplicațiile ce procesează milioane de cereri într-un interval de timp scurt le pot folosi.
Aceste unelte au ajuns atât de avansate încât poți interacționa cu date din baza de date ca și cum ar fi date pe care le ai direct în memorie într-o listă, array, vector etc.
Ba chiar multe fac pentru tine și modificările necesare bazei date, atunci când vrei să schimbi/adaugi/scoți coloane dintr-o tabelă. Acest proces poartă numele de “migrare”.
Aici se aplică mai degrabă când vorbim de baze de date relaționale, pentru că cele non-relaționale sunt mult mai flexibile și nu au nevoie de operațiuni de migrare pentru a schimba schema.
Concluzie
O să auzi/citești o grămadă de discuții în contradictoriu legate de uneltele ORM, dar cele mai multe argumente contra lor aparțin din păcate trecutului.
În prezent performanța și ușurința lor în utilizare și integrare în aplicații atârnă destul de greu într-o discuție de pro vs. contra.
Toate sistemele software enterprise pe care am lucrat, sisteme care propulsează cele mai mari companii din lume, de la bănci la companii pharma folosesc ORM-uri pentru accesul la date.
Și pentru că am vorbit tot articolul despre ele la modul abstract, uite câteva exemple de ORM-uri pentru diferite limbaje/ecosisteme de dezvoltare:
- Entity Framework pentru C#
- Hibernate pentru Java
- Prisma pentru NodeJS
- Room pentru Kotlin
Dacă vrei să înțelegi mai bine cum funcționează un ORM, în C# Masterclass lucrăm la o aplicație web de la 0 folosind ASP .NET Core MVC și Entity Framework. Vei putea învăța nu numai cum să folosești Entity Framework pentru a interacționa cu baza de date, dar și cum să faci schimbări în structura ei (proces care poartă numele de “migrare”).
Cam atât, până data viitoare continuă să înveți! 🙌