2012-09-09 12 views
5

Sto cercando di riscrivere un gruppo di DAO qui è l'impostazione:Utilizzo di DAO con gli oggetti compositi

  • solo pianura JDBC (senza JPA, ORM di sorta)
  • nessuna interfaccia utilizzata
  • un sacco di controlli prima di inserire un oggetto
  • oggetti commerciali sono fortemente legati

mia domanda principale è: Come faccio Persi st/recuperare un oggetto business che è composto da più altri oggetti? ad es. il mio CustomerDAO conosce AddressDAO e recupera gli indirizzi di csutomers da lì?

+0

dare un'occhiata a [jcabi-jdbc] (http://www.jcabi.com/jcabi-jdbc), è un involucro leggero attorno a JDBC (sono uno sviluppatore) – yegor256

risposta

1

solo pianura JDBC (senza JPA, ORM di sorta) oggetti commerciali sono fortemente legati

Non certo perché non si desidera utilizzare JPA mentre si desidera che gli oggetti di business per essere collegate, ma almeno dovresti usare il modello JDBC di Spring che ti libererebbe da qualche codice standard.

Per quanto riguarda gli altri vincoli, lo farei come segue:

  1. Vorrei ancora impiegare interfacce per definire i DAO metodi e la loro attuazione in un modello di primavera JDBC sostenuta DAOImpl. Utilizzare il DAO ovunque e iniettare DAOImpl.
  2. I miei DAO saranno semplicemente mappatura uno-a-uno alle tabelle sottostanti e ciascun DAO non saprebbe dell'esistenza di altri DAO.
  3. Il mio livello Manager avrà tutta la logica aziendale che esegue controlli di convalida e prepara l'insieme di oggetti che devono essere persistenti, chiama il DAO appropriato e il metodo appropriato (CREATE/UPDATE/DELETE) per mantenere gli oggetti.
  4. Anche in questo caso, il livello Manager seguirà l'implementazione basata su interfaccia e il livello di visualizzazione avrà i tipi di gestore iniettati con ManagerImpls.

I miei due centesimi!

+0

Grazie! Ho pensato a JPA. Finora l'argomento controtendenza era che questa applicazione non è in alcun modo ben definita e non sono sicuro di come funzionerebbe il bullonaggio su JPA. (Questa cosa non funziona nemmeno su un server delle applicazioni!). Tuttavia se ti capisco i punti 2-4 equivarrebbe essenzialmente a codificare il mio entityManager, giusto? – er4z0r

+0

Proprio così, il tuo livello manageriale sarà a conoscenza delle associazioni tra diversi oggetti di dominio (es. Cliente, Indirizzo) ecc. Se hai utilizzato le specifiche JPA per definire le tue entità e le loro associazioni e utilizzato un provider JPA (come Hibernate), si sono occupati di mantenere la gerarchia degli oggetti e potreste concentrarvi sull'oggetto di trasferimento dei dati -> traduzione degli oggetti del dominio. – Vikdor

0

Si può prendere in considerazione l'utilizzo di JOOQ. Non è JPA, ma può essere facilmente utilizzato come soluzione alternativa. È abbastanza leggero Fornisce inoltre uno strumento di reverse engineering, in cui crea le entità del database come oggetti DAO.

Ho incorporato JOOQ in una situazione rilevante, in cui l'applicazione è stata progettata in modo equo. Non ho usato la sua funzionalità DAO, piuttosto che usarlo come livello superiore per evitare di fare scherzi con JDBC Layer.

Cheers!

0

Le entità composite sono uno strato sopra i DAO. Se si desidera rimuovere TUTTO l'accoppiamento, gli oggetti di dominio persistenti da DAO dovrebbero essere piatti senza relazioni. Vedi i modelli Core J2EE CompositeEntity.

Inoltre, è una buona idea non introdurre l'accoppiamento tra i DAO mettendo i cercatori per uno nell'altro. Es .:

IndirizzoDAO.findForCustomerId (id);

è inferiore all'utilizzo di un terzo DAO per gestire la relazione. I.E:

CustomerAddressRelDAO.findAddressForCustomer (id);

Se si utilizza una relazione DAO, né l'indirizzo né il cliente dipendono (o ne sono consapevoli) reciprocamente.

Problemi correlati