Domanda

Ho un progetto che utilizza Spring ed è suddiviso in una dozzina di DAO e DTO associati. Sto usando JdbcTemplate, ma non molto altro, in quanto è esattamente il livello di astrazione di cui sono felice.

Attualmente sto eseguendo un caricamento lento sui miei DTO inserendo un codice piuttosto peloso nei loro getter.

La logica di base della caldaia è: 1. Se il campo non è null, restituire il valore e uscire 2. Contattare il DAO appropriato e recuperare i DTO pertinenti 3. Conservali fino alla prossima volta.

Funziona bene, tranne per il fatto che i miei modesti DTO sono accoppiati con un sacco di DAO e non sono così POJOey.

Un altro odore di codice appare se inserisco la logica nel DAO poiché gestirà sia CRUD per i suoi DTO che Lazy Loading, e come ho capito gli oggetti dovrebbero avere una sola responsabilità.

Spero che ci sia un approccio Spring relativamente semplice che posso usare per iniettare un oggetto Lazy Loader tra i DAO e i DTO per raggiungere questo obiettivo, ma qualsiasi altra soluzione funzionerebbe per me.

Qualche idea?

È stato utile?

Soluzione

È più facile avvolgere i DAO attorno ai DAO ... dipende dalla quantità di modello che si desidera trasmettere. I DTO non vengono in genere utilizzati per portare uno a molti con loro, come due o più chiamate separate da database / dao. In tal caso, vuoi davvero un ORM. Dal momento che stai cercando una risposta dao ......

Non c'è nulla che ti impedisca di collegare i DAO insieme per darti un unico DTO. È più facile quindi avere un DTO collegato a un DAO. Non è davvero un livello di servizio, è solo blocchi di DAO. Quindi potresti avere un PersonDao e un telefono NumberDao. Una persona può avere più di un numero di telefono, quindi puoi anche avere PersonModelDAo, che utilizza PersonDao e TelephoneNumberDao sotto il cofano per fare il suo lavoro.

In alternativa, evita l'intero problema e non provare a mappare l'1-N tra persona e numero di telefono a livello DTO. Chiedi alla tua UI di effettuare le chiamate giuste ai DAO giusti. In realtà mi piace di più quando uso DTO.

Altri suggerimenti

È comune introdurre un livello di servizio che avvolge i tuoi DAO e gestisce problemi come quello. Se hai paura di inserire troppi codici boilerplate nei tuoi DTO per gestire il caricamento lento, forse usare AOP potrebbe essere un modo per raggiungere questo obiettivo. Potresti voler esaminare AspectJ e tessere in fase di compilazione o in fase di caricamento. Dal momento che dovresti modificare direttamente il codice byte non dovresti preoccuparti del sovraccarico di prestazioni dell'AOP basato su proxy.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top