Sostituire il livello dao

3

Sto sviluppando una serie di servizi web (basati su mvc primaverili e primaverili ).

Per la prima volta nella mia carriera di sviluppatori ho intenzione di sostituire lo strato dao in futuro (l'ho sempre visto menzionato ma non ho mai dovuto farlo).

Attualmente sto usando le annotazioni di primavera, quindi potrei semplicemente cambiare il nome del qualificatore del dao iniettato in ogni posto in cui è usato; c'è un meccanismo migliore (globale) che potrei usare?

Attualmente il mio codice assomiglia a questo (dichiarando il dao):

@Repository("regionDao")
public class RegionDao implements IRegionDao

e Iniezione:

@Resource(name = "regionDao")
IRegionDao regionDao;

Ma entrare in ogni classe di servizio e cambiare il nome della qualifica sembra piuttosto lungo, è il loro modo migliore. In pratica, in futuro, voglio capovolgere un interruttore e ogni riferimento ad una regione

punta a newRegionDao e così via per altri dao.

È preferibile una soluzione che usi annotazioni, per nessun altro motivo che preferisco soggettivamente. Ma mi rendo conto che questo potrebbe essere un caso per la configurazione basata su XML?

    
posta NimChimpsky 09.05.2012 - 10:31
fonte

2 risposte

3

Puoi aggiungere un livello di riferimento indiretto usando i segnaposti delle proprietà per i nomi delle classi:

< bean id="regionDaoDao class" "$ {com.wibble.newRegionDao}" >

E quindi configurare i nomi delle classi DAO nei file delle proprietà.

Sono d'accordo con gli altri utenti che questo è probabilmente eccessivo per fare ciò per un'attività che farai raramente come cambiare il back end di persistenza.

[Questa tecnica è probabilmente più utile negli scenari di test di integrazione a proposito: dove, per esempio, si desidera eseguire test su un data store o provider di messaggistica ed eseguire in produzione contro un altro.]

link

    
risposta data 09.05.2012 - 15:22
fonte
2

Personalmente non riesco a vedere cosa potrebbe essere più facile che cambiare il nome della risorsa che sto iniettando nelle mie classi di servizio e test di integrazione. Anche in un grande sistema in cui hai centinaia di DAO, questo ti porterà solo per 2 ore al massimo? E inoltre, puoi semplicemente fare un tirocinante o più fresco farlo:)

Per un vero processo in un'unica fase, suggerisco comunque di configurare Spring tramite documenti XML. So che questo non è ciò che vuoi sentire perché personalmente amo anche la configurazione basata su Annotation, ma considerando che prevedi un'alta probabilità di spostare i livelli di dati in futuro, questa potrebbe essere un'idea migliore per una serie di motivi.

Considerare anche un sistema che potrebbe essere necessario distribuire in ambienti di configurazione molto diversi, probabilmente per clienti diversi. Dove lavoro siamo un fornitore di software ei nostri due principali clienti per uno dei nostri prodotti hanno esigenze diverse per ospitare il nostro software. Un cliente ha una licenza aziendale per Oracle, mentre l'altro ha una licenza aziendale per SQL Server, nessuno dei quali vuole spendere soldi aggiuntivi per licenze di database e supporto per un singolo sistema, e giustamente.

La creazione di un XML di configurazione DAO di Spring separato per ciascun client a quel punto diventa una necessità per uno script di build automatico che include l'XML di configurazione DAO appropriato per il build client in questione. Quindi, fondamentalmente pulito quanto le annotazioni possono sembrare e tanto facile quanto decifrare lo scopo e la configurazione di una classe, le annotazioni sono essenzialmente inutili per me in questo scenario.

    
risposta data 09.05.2012 - 13:08
fonte

Leggi altre domande sui tag