Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-06-2010, 21:25   #1
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
[hibernate - java] perché dovrei usare un pattern DAO?

Ciao a tutti, qualunque cosa cerco riguardo a hibernate salta fuori sto pattern DAO, che da quel che ho capito altro non è che che creare una classe che gestisca le CRUD di una "entity"(classe persistente che identifica una tabella nel db).
Ok, ci potrebbe anche stare come idea, ma:
  1. Perché devo soffrire e crearmi per ogni entity una classe per gestirla?
  2. Se poi devo cambiare qualcosa devo modificare la entity, e molto probabilmente anche la classe che ne gestisce le CRUD
  3. Diventa tutto più lungo da fare e da mantenere, allora tanto vale che continuavo ad usare JDBC senza passare ad hibernate no?

Ora mi/vi domando, ma perché mi devo complicare la vita in questo modo usando questo pattern?

Le cose sono due, o non ho capito una mazza(molto molto probabile) o ci si è ingegnati per fare le cose più difficili.

Qualcuno mi potrebbe fare qualche esempio dove l'uso di un pattern DAO mi tornerebbe utile?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:15   #2
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
spiegami, tu vorresti fare le operazioni CRUD direttamente chiamando le api di hibernate nelle tue classi di business??
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:18   #3
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Che intendi per le classi di business?

Io comunque vorrei fare le operazioni che interessano una entity nella entity stessa ( come tra l'altro prevede l'OO), non vedo perché andare a creare un'ulteriore classe per fare ciò, che poi è da mantenere anche quella.

Ci sono motivi di perfomance? Si rompe qualcosa? Non so...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:29   #4
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
il DAO serve per astrarre, dalle tue classi di logica chiami il dao senza sapere cosa hai sotto che fa la persistenza, cosi ti astrai dalla tecnologia e nel caso volessi cambiare implementazione dello strato di persistenza non ci sarebbero problemi
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:31   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
il DAO serve per astrarre, dalle tue classi di logica chiami il dao senza sapere cosa hai sotto che fa la persistenza, cosi ti astrai dalla tecnologia e nel caso volessi cambiare implementazione dello strato di persistenza non ci sarebbero problemi
Intendi non ci sarebbero problemi tranne riscrivere il DAO?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:33   #6
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Intendi non ci sarebbero problemi tranne riscrivere il DAO?
esattamente, altrimenti dovresti toccare tutte le classi, non e niente di più che il concetto di API
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:41   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Intendiamoci, la mia intenzione era quella di fare circa la stessa cosa che si fa per creare un bel DAO, quindi interfaccia, classe astratta che la implementa e finalmente la classe DAO vera, con la sola differenza che la classe DAO finale che estende la classe astratta è la entity stessa!

In questo modo si andrebbero ad aggiungere metodi che in fin dei conti operano direttamente sulla entity nella entity stessa, e in più non ci si ritrova con tante classi, e per quanto mi riguarda non c'è il concetto classe che gestisce->classe gestita che lo trovo illogico.

Ovviamente se non si fa così ci deve essere un motivo...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:55   #8
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
in questo modo sei comunque legato alla tecnologia sottostante, il pattern DAO serve appunto a dissaccoppiare l'implementazione della persistenza dalle tue classi di logica, con l'estensione l'accoppiamento rimane

il concetto classe gestita-classe che gestisce è un classico dei pattern, vedi Delegate
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2010, 23:58   #9
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
in questo modo sei comunque legato alla tecnologia sottostante, il pattern DAO serve appunto a dissaccoppiare l'implementazione della persistenza dalle tue classi di logica, con l'estensione l'accoppiamento rimane

il concetto classe gestita-classe che gestisce è un classico dei pattern, vedi Delegate
Sei sempre legato alla tecnologia sottostante a dirla tutta, se si fanno i DAO poi si cambieranno quelli, se si mette tutto nelle entity invece si andranno a toccare le entity... il risultato non cambia in quei termini...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2010, 00:34   #10
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da MEMon Guarda i messaggi
In questo modo si andrebbero ad aggiungere metodi che in fin dei conti operano direttamente sulla entity nella entity stessa, e in più non ci si ritrova con tante classi, e per quanto mi riguarda non c'è il concetto classe che gestisce->classe gestita che lo trovo illogico.

Ovviamente se non si fa così ci deve essere un motivo...
Personalmente non vedo bene l'integrazione delle operazioni di CRUD sulle entity, in quanto significa legare la classe specificatamente all'utilizzo con database, quando in realtà l'entity è (per me) solo un contenitore di dati.
Oltretutto significa che l'entity deve conoscere il database da cui ha origine, ma non necessariamente l'oggetto avrà origine su database: se volessi serializzarla/deserializzarla su file? Se dovessi poi passarla ad un webservice? I metodi read e insert da db non andrebbero più bene.
Se l'entity assume il significato di semplice contenitore di dati, poi posso riutilizzarla meglio in molti più contesti e posso scambiare tra i vari livelli dell'applicazione un oggetto più leggero che non si porta dietro legami con la base dati.
Altro problema che riscontro è la possibilità che venga saltata la logica di business dell'applicativo, ad esempio ci potrebbero esistere degli stati in cui un'operazione CRUD non è ammessa in quanto logicamente sbagliata per condizioni indipendenti dall'entity stessa. Come faccio ad averne il controllo se chiunque abbia un riferimento all'entity può eseguire tali operazioni? Dovrei aggiungere logica dentro l'entity per evitare queste casistiche?

Personalmente trovo molto meglio separare logica e metodi per il CRUD dall'entità che rappresenta i dati
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2010, 22:26   #11
Otaking
Junior Member
 
L'Avatar di Otaking
 
Iscritto dal: Jun 2009
Città: dintorni di Torino
Messaggi: 21
beh il discorso è anche che...se te hai delle delle classiche classi e poi hai le rispettive DAO per fare tutto quello che desideri con un DB, hai sempre ha disposizione le classi base per poter lavorare su altri fronti (esempio NON su un DB).
Se metti tutto nelle entity, rischi di dover poi apportare delle modifiche devastanti... mentre con Hibernate/Dao metti le mani avanti per una gestione più pulita, ottimizzata, pronta per del refactoring, ecc...
Otaking è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2010, 12:38   #12
zakmckraken
Member
 
Iscritto dal: Apr 2004
Messaggi: 56
Giusto per rompere le scatole, carinissimo hibernate, ma se uno deve fare cose meno che semplici inizia ad impazzire con le dipendenze, con i bags, liste collezioni, oggetti che si tirano dietro mezzo database, documentazione mai chiara per le soluzioni che servono..
Ora, lo uso anche io, ma giusto quando mi trovo con un database da 15-20 tabelle max con db di 80/100 Mb ma non mi sognerei mai di andare oltre...

Giusto un opinione, attendo conferme o smentite (anche perche vorrei capirlo meglio sto oggetto blasfemo :P )
zakmckraken è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2010, 13:17   #13
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
ma se un applicazione è pesantemente data-centrica imho tanto vale buttarsi sul pl/sql
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2010, 18:17   #14
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da zakmckraken Guarda i messaggi
Giusto per rompere le scatole, carinissimo hibernate, ma se uno deve fare cose meno che semplici inizia ad impazzire con le dipendenze, con i bags, liste collezioni, oggetti che si tirano dietro mezzo database, documentazione mai chiara per le soluzioni che servono..
Ora, lo uso anche io, ma giusto quando mi trovo con un database da 15-20 tabelle max con db di 80/100 Mb ma non mi sognerei mai di andare oltre...

Giusto un opinione, attendo conferme o smentite (anche perche vorrei capirlo meglio sto oggetto blasfemo :P )
Io sto iniziando ora, le potenzialità sono enormi ma come primo approccio non è dei più semplici.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2010, 08:55   #15
zakmckraken
Member
 
Iscritto dal: Apr 2004
Messaggi: 56
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
ma se un applicazione è pesantemente data-centrica imho tanto vale buttarsi sul pl/sql
Se pero'deve essere pure portabile so'problemi :P Spesso e volentieri mi sono trovato meglio a gestire la costruzione delle queries con oggetti Java/C#/C (vedi come hanno fatto in Php4Application, giusto per dare un esempio). E'un altro approccio chiaramente, ma se non altro ho pochi (1) posto dove fare le modifiche :P

Zak
zakmckraken è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Meta moltiplica gli investimenti in data...
Addio riflessi fastidiosi? Samsung prese...
PlayStation 5, doccia fredda da Sony: i ...
Super Meat Boy 3D: annunciata la data d'...
XT View Matrix, il mid-tower Phanteks ch...
David Sacks lascia il ruolo di 'Crypto C...
LG All Stars 2026: quando l'installatore...
Addio ad Anna's Archive? Ecco la mossa l...
Addio al Mac Pro, Apple mette fine a un ...
Panasonic a MCE 2026: la rivoluzione sil...
Netflix alza la posta: il piano Premium ...
Nimbus Innovation Awards – Cloud Edition...
Wikipedia vieta i contenuti generati dal...
Niente volante, niente schermi: cos&igra...
Gli 'Avengers' di Windows sono tornati: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v