|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
[ORM] Cos'è e quali sono i vantaggi?
Ho sentito parlare di ORM come Doctrine ma non ho men capito cosa siano.
Potreste farmi degli esempi concreti? Potrebbe essermi utile nella realizzazione di un pannello di amministrazione? |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
__________________
Khelidan |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Sui vantaggi... è una faccenda controversa.
Se vuoi leggere un pò di opinioni eterogenee, se ne è discusso recentemente su reddit: http://www.reddit.com/r/programming/...ewell_to_orms/
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1161
|
Quote:
in poche parole se tu volessi estrarre dal DB un utente e i suoi messaggi, dovresti fare una join tra due tabelle. Se in JPA volessi far la stessa cosa fai Codice:
Utente utente = getEntityManager.find(Utente.class, "m.rossi"); System.out.println(utente.getNome + utente.getCognome()); for (Messaggio messaggio : utente.getMessaggi()) { System.out.println(messaggio.getTitolo() + messaggio.getTesto(); } Ovviamente condizione necessaria è sapere usare JPA! Se non la sai usare o la usi male, ci perdi più tempo, ma se lo sai usare, tutto si fa in un decimo del tempo.
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Fammi un esempio più complesso e vediamo se ci metti ancora un decimo del tempo... e con complesso intendo anche solo qualcosa come: l'oggetto Utente non si può costruire con una select da una tabella 'Utenti', ma le informazioni sono sparse su più tabelle, magari su database diversi... peccato che tu su uno dei database non possa fare select dalle tabelle perchè "le policy aziendali sono queste" ma si debba reperire i dati da una qualche procedura PL/SQL. Ah dimenticavo, deve funzionare su Websphere, non su Glassfish (troppo facile!), e con i driver JDBC di Oracle (buggati). Ah... non dimenticare della foto dell'utente in quella colonna di tipo BLOB...
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() Una volta definità l'entità come classe, e mappata (il come dipende a seconda dell'orm) se anche le informazioni di un utente sono sparse per nmila tabelle, non ha alcuna rilevanza. Un piccolissimo esempio di map su diverse tabelle(utilizzando NHibernate): Codice:
<class name="Utente" table="anagraficaUtente"> <id name="ID" column="utenteId" type="Int32"> <generator class="identity"></generator> </id> <property name="Cognome" blablala></property> <join table="telefoniUtente"> <key column="utenteId"></key> <property name="asdasdasdasd" blalblabla></property> </join> <join table="quanteSigaretteFumaUtente"> <key column="utenteId"></key> <property name="blbalbalbalbalblab"etc....></property> </join> etcetera.... La cosa pratica è che l'entità con cui avere a che fare da sorgente, è una sola.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
![]() quando hai a che fare con questa gente bisogna considerarsi furtunati che hanno pensato a fare il mirabolante passo da cobol a java..... Comunque per utilizzare questi cosi bisogna applicare la "convention over configuration" anche perchè non so voi ma io non ho intenzione di programmare in xml! P.s: websphere fa proprio schifo,questo è l'esempio principe di quanto conti un nome
__________________
Khelidan Ultima modifica di khelidan1980 : 14-10-2009 alle 20:24. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Quote:
![]() Dove lavoro io, in banca, all'inizio mi chiedevo pure io perchè non si utilizzasse qualcosa come JPA piuttosto che direttamente con JDBC (o meglio un wrapper di questo)...beh la risposta l'ho trovata strada facendo...considerate che tutto sta sopra database db2 che vengono usati solo per buttare dentro dati, mai visto utilizzo di chiavi primarie o esterne e chi ci lavorava fino ad adesso, non me ne vogliano i programmatori cobol di questo forum, hanno sempre fatto così..vi giuro che sono rimasti sorpresi quando noi javisti abbiamo proposto di usare delle colonne tipo id per mantenere un legame tra due tabelle..azzo manco le join vogliono fare ![]() Tutto questo per dire che non vedrei grossi vantaggi nell'usare un ORM in un contesto simile.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Arrivato in azienda a fine 2004, quando ho fatto vedere che con le foreign key i record delle tabelle slave venivano automaticamente cancellati, hanno fatto una faccia così
![]() Transazioni, trigger e stored procedure? Fantascienza. Sono stato il primo a usarli, e ancora oggi credo di essere l'unico ad aver fatto uso di questi ultimi due. E siamo a fine 2009... Quanto agli ORM, concettualmente mi piacciono, ma a conti fatti e nella vita di tutti i giorni ho sviluppato una sorta di wrapper che genera automaticamente codice SQL per le SELECT, INSERT, UPDATE e DELETE (simile a LINQ, per intenderci): di gran lunga più comodo e semplice da usare. A me servono strumenti agili per lavorare.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1161
|
Quote:
Conosco ho colleghi che in ambiti enterprise tramite wrapping vari riesce a usare le comodità di JPA anche su database legacy. Comunque se hai un database strutturato decentemente, piuttosto che fare 10 join con SQL, tramite JPA e le relazioni tra oggetti tutto è mille volte più veloce.
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Una query SQL è molto più veloce di qualunque astrazione software tu ci possa mettere sopra, semplicemente perchè lo strumento automatico non genererà mai una query ottimizzata come potrebbe fare una mente umana. Più o meno lo stesso discorso sulla velocità di esecuzione/velocità di sviluppo tra Assembly-C-Linguaggi Managed |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1161
|
Quote:
costa molto meno comprare hardware più potente che pagare il doppio di ore gli sviluppatori PS: e anche sul discorso velocità del prodotto non è sempre detto, dipende da come sanno scrivere bene SQL i programmatori.
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Cioè il paragone tra "query ORM versus query SQL scritte a mano" e "codice ottimizzato a mano assembly/C/C++ versus linguaggi managed" è sbagliato. E il motivo è che la complessità delle ottimizzazioni per sua natura non ha a che fare solo con aspetti statici del codice, valutabili quindi in maniera esaustiva da una mente umana, ma comprende aspetti dinamici, conoscibili solo a runtime, e questi aspetti possono essere presi in considerazione solo da appositi strumenti che esaminano le condizioni di runtime ed eseguono al volo eventuali ottimizzazioni.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1161
|
con JPA non si usa XML si usano le annotation.
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
bello sinceramente non lo mai usato JPA,io ovviamente mi riferivo a hibernate & company e più in generale al 99% dei framework java,spring struts ecc...per i mei gusti sono troppo xml-centrici...
__________________
Khelidan |
![]() |
![]() |
![]() |
#16 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
L'ennesima riprova l'ho avuta di recente quando tra 2 applicativi uno Java e uno C++ (o meglio in C con le classi, dato che del C++ usava solo la OO) sulla stessa macchina per distribuire lo stesso filmato il primo impiegava la cpu al 90% l'altro neanche si faceva sentire con un'occupazione di ram ridicola (11Mb). Con il secondo software sono arrivato a tirare il collo all'applicativo (e alla lan gigabit) ben prima di saturare minimamente la macchina, con il secondo la macchina era già che morta con un numero irrisorio di client. E in ogni caso c'è sempre il costo di questi ottimizzatori a runtime (che non ho mai capito fino a che punto e come riescano ad ottimizzare codice reale). In ogni caso è innegabile che a livello di velocità se devo lavorare con istruzioni SIMD e scrivo una routine assembly il codice nel complesso migliora in prestazioni che non a caso è quello che viene fatto in tutte le librerie codec AV per esempio. Quote:
Quote:
Comunque anche dove lavoro io per il momento usiamo un tool che mappa le tabelle in classi e crea metodi per l'interazione di queste con il database, ma abbiamo ancora i DAL fatti a mano, anche perchè se c'è da fare una join al 99% si usano le viste (altra ottimizzazione, una vista è più efficiente di una query con join) |
|||
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@tomminno: ti ho risposto via pvt per evitare l'OT.Ciao.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Anche per .Net puoi evitare di usare gli xml utilizzando Fluent NHibernate (se utilizzi Nhibernate ovviamente... )
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Tanto vale usare l'Entity Framework della Microsoft: integrato in Visual Studio e molto più veloce. |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
perdona la mia sbadataggine ho connesso ora che jpa erano gli ejb 3.0
![]() E te credo che non si usano più gli xml,dopo aver sputato sangue letteralmente con le vecchie versioni di ejb!!!!
__________________
Khelidan |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:23.