Care este modul dvs. preferat de a interacționa cu bazele de date din limba dvs. de programare?

Există numeroase moduri de conectare și interacțiune cu stratul bazei de date. În Java, de exemplu, uzanțele comune sunt JDBC apeluri de SQL primare, harta de relații obiect, JDBCTemplate ( Primăvară ), proceduri stocate etc.

În limba dvs., care opțiune este preferința dvs. și de ce? Când ați considera ceilalți?

0
fr hi bn

15 răspunsuri

N-am ajuns în lumea LINQ încă, dar am venit într-adevăr să iubesc DataTable clase/TableAdapter că Visual Studio a realizat cu ajutorul un set de date XSD. Prin câteva clicuri și după drag crearea schema mea de baze de date, am un set de date/obiect DataTable care este puternic tastat și am metode adaptor care utilizează interogări parametrizat la procedurile mele stocate pentru toate declarațiile mele CRUD. Se va crea chiar și adaptoare de tabelă de interogare pentru unele proceduri care nu sunt direct legate de un tabel.

Oh, și dacă nu ați creat încă procedurile stocate și pur și simplu aveți tabele, expertul va crea procedurile sau instrucțiunile SQL adhoc pentru dvs.

Acest lucru a iesit de la Visual Studio 2005 si a redus drastic timpul meu de "structura" cu noile mele aplicatii web si ma pot concentra mai mult pe logica de afaceri si prezentare.

0
adăugat

Ruby on Rails ActiveRecord șterge podeaua cu tot ce am văzut până acum. LINQ pare a fi mai bine în unele cazuri, dar ActiveRecord este la fel de flexibil.

0
adăugat

ORM este într-adevăr fantastic.

Eu folosesc Alchema SQL când lucrez în Python - funcționează cu aproape orice DBMS pe care l-am întâlnit.

Pentru aplicații ușoare bazate pe date pe MacOS X, folosesc Core Data, care are un instrument de modelare a datelor foarte accesibil prin Xcode.

Ambele arata ca ORM a facut bine este excelent. Am avut mai puțin succes și bucurie cu EJB.

0
adăugat

ORM de fiecare dată, cel puțin trebuie să mă gândesc la bazele de date cu atât mai bine.

0
adăugat
Ce se întâmplă dacă doriți să citiți 10000 de rânduri din baza de date și să stocați totalul undeva? De ce să trageți tot ceea ce în rețea atunci când ați putea: inserați în totaluri .. selectați din detalii?
adăugat autor WW., sursa
Cu un ORM, nu trebuie să citiți 10000 de rânduri pentru a obține totalul. De exemplu, în LinqToSql este posibilă utilizarea unei metode Sum pentru a face o sumă a unei proprietăți, care apoi este convertită în SQL corect, care permite serverului sql să calculeze suma fără a returna toate rândurile.
adăugat autor Ole Lynge, sursa
@Ole: LinqToSql (care suportă numai SQL Server și poate fi deja mort în favoarea Entity Framework) este încă o cutie neagră, de ce nu scrieți singur SQL-ul? Și dacă puneți logica sumară într-o procedură stocată, nu este necesar să acordați aplicației prime acces la tabelele dvs.
adăugat autor ObiWanKenobi, sursa

LINQ este calea de a mă duce de aici încolo

0
adăugat

În C# îmi place LINQ to SQL pentru orice altceva nou, dar îmi place foarte mult să folosesc netTiers C# pe .NET 2.0.

0
adăugat

Prefer să construiesc un strat model de obiect de activitate (obiecte și colecții de obiecte).

Construiesc abilitatea de a interacționa cu baza de date în fiecare obiect/colecție (pentru SQL Server, folosesc System.Data.SqlClient ). Am folosit acest model pentru SQL Server, MySQL și Oracle.

Apoi interacționez cu obiectele din codul meu de aplicație.

Prin abstractizarea bazei de date în obiecte, codul meu de aplicație este consistent, indiferent de baza de date backend.

0
adăugat

Îmi place Hibernare foarte mult :)

Știu că are o curbă de învățare, dar odată ce l-ai stăpânit, este destul de frumos.

Inutil să spun că nu pot să aștept să-mi iau mâinile pe noul Entity Framework în .NET 3.5 SP1 (știu că este deja disponibil, dar eu sunt un pic leneș să tip xml :))

0
adăugat

Îmi place cu adevărat modul de lucru 3 + 1 de a face lucruri. Un nivel pentru UI, unul pentru logica de afaceri și pentru date persistente. Ultimul pe care-l spui? Obiecte și interfețe de domeniu. Acest lucru face posibila incarcarea oricarei sau a doua dintre nivelurile principale, plus domeniul "nivel", iar codul ar trebui sa functioneze.

Se bazează foarte mult pe injecții de dependență și Principiile inversării controlului . Nivelul de date/persistență nu are decât două lucruri. Creează, citește, actualizează și șterge datele și le mută pe formatul obiectului de domeniu.

Nivelul UI face exact opusul. Se afișează și primește date într-un mod care utilizatorul poate referi la, și hărți care de ieșire/intrare și de formatul de domeniu de obiect.

Nivelul logicii de afaceri trebuie doar să știe un singur lucru. Lociga afacerii. Nu-i pasă de unde provin datele și nu-i pasă de locul în care se află nivelul de date. Știe că ar trebui să semnaleze un cont care a fost tocmai exagerat, cum să faci fizic acest lucru nu face parte din slujba lui într-adevăr.

Obiectele de domeniu în sine nu au nici o logică, sunt doar containere pentru trecerea datelor între niveluri. Aceasta înseamnă că puteți încărca obiectele de domeniu și interfețele fără a trebui să vă gândiți deloc la dependențe.

La sfârșitul zilei simt că am o bază de cod destul de clară, cu niveluri clar separate. Și cu unele interfețe stricte și clase bune de bază, cea mai mare parte a codificării este doar să spună software-ului ce să facă atunci când se întâmplă X. Cum ar trebui să fie.


Editați: Da, da. Acest lucru este valabil atât pentru linkurile LINQ, cât și pentru celelalte ORM-uri.

0
adăugat

Folosesc JDBC simplu pentru că dezvolt o aplicație bazată pe date și modelul meu de bază de date este foarte complex. Totul este descris în baza de date, chiar structura altor tabele. În plus, folosesc foarte mult procedurile stocate. Prin urmare, ORM nu este o opțiune pentru mine.

0
adăugat

Utilizăm o abordare mixtă, în funcție de ceea ce se va potrivi situației particulare din cadrul aplicației:

  • Atunci când citiți o pagină în valoare de informații de afișat și pentru ca un utilizator să se actualizeze, folosim modul Hibernare
  • Când procesăm un lot de actualizări sau rezumăm unde sunt deja cele mai multe date în baza de date (de exemplu, la sfârșitul zilei de procesare), folosim PL/SQL (și încercăm să gândim în seturi)
  • Când un utilizator efectuează o căutare sau execută un raport sumar, folosim ibatis sqlmaps pentru a construi niște SQL și pentru a readuce înapoi numai câmpurile care ne interesează (nu fiecare coloană și cu siguranță nu orice rânduri inutile pentru copii, urggh) li>
  • Orice trebuie să alerge rapid, vom folosi orice abordare funcționează cel mai bine

Aceasta este cu java/Oracle.

0
adăugat

ActiveRecord, which is a pattern documented first (I think) in Fowler's Patterns of Enterprise Architecture. I believe it's implemented in languages other than Ruby, although it's well-known as a core technology in Rails. Whatever, it's a neat abstraction of the database, although I have to confess that I find it a bit clunky and in the find_by_sql area. But that may just be me.

Dar (punerea pe cap acum bătrânul Grumpy) toate ORM-urile din lume nu înlocuiesc o bună cunoaștere a SQL-ului, fără de care nu-mi place să văd că accesul la un RDBMS este permis deloc.

0
adăugat

Modul meu favorit este de a avea un strat de abstractizare obiect. În mod ideal, acesta este un loc numai care funcționează cu SQL. Dar, în practică, uneori obiectele trebuie să facă lucruri SQL-y. Dar nimic în afara obiectului.

Până acum, am scris astfel de straturi pentru că ceea ce era disponibil a fost prea ciudat, prea lent sau prea mare.

0
adăugat

Cea mai preferată cale este să utilizați Smalltalk cu un depozit de obiecte GemStone. De ce? Nu există nici o problemă cu ORM. Aș considera altceva dacă sunt forțat sau amenințat de angajatorul meu.

0
adăugat

În prezent, folosim ODAC pentru a vorbi cu baza de date Oracle și pentru a utiliza o mulțime de pachete Oracle ( PL/SQL ). Sistemul n-tier este realizat prin intermediul RemObjects, ceea ce înseamnă că clientul nostru nu are SQL în niciun fel și are nevoie doar de capacitatea de a trimite cereri HTTP, astfel încât să nu existe instalări deasupra capului.

Toate acestea se fac folosind Borland Delphi și se află timp de 2 ani într-un mediu de producție.

0
adăugat