Domanda

Lavoro sul progetto JBJF su SourceForge e vogliamo migliorare l'accesso al database per questo framework. Attualmente è semi-flessibile, ma l'accesso avviene a livello di attività.

Vorremmo configurare una semplice interfaccia di qualche tipo di natura generica e in grado di ospitare l'accesso al database da / verso JBJF. Pertanto, alle classi Framework non interessa quale tipo di database, chiamano semplicemente un metodo come getConnection () e viene restituito un oggetto java.sql.Connection.

Mi chiedo quale sarebbe più adatto, un tipico livello DAO con una singola interfaccia o una struttura di tipo Plugin in cui configuriamo il Servizio database in un file XML e il Framework carica i Plugin all'avvio.

tia,

adym

È stato utile?

Soluzione

Stavo iniziando a pensare che Hibernate fosse diventato troppo grande e gonfio, ma di recente ho lavorato su un progetto usando l'ultima versione 3.5 e usando JPA e lo hanno decisamente ridotto e reso molto meglio di alcuni dei le altre versioni 3.x. Consiglierei JPA usando Hibernate :-)

Una delle grandi cose di questo approccio è la capacità di Hibernate di gestire diversi dialetti di database diversi. La nostra app funziona su MySQL, H2 e SQLServer senza modifiche (e probabilmente verrebbe eseguita anche su altri database importanti).

Altri suggerimenti

che ne dici di togliere tutto e usare JPA

È difficile dirlo senza conoscere i dettagli, ma in generale non scriverei il mio framework e utilizzerei invece Hibernate o uno strumento ORM simile. Ha già definito XML per mappare oggetti su tabelle e viceversa, può facilmente scambiare in / out diverse implementazioni di database ed è generalmente un ottimo strumento per fare questo tipo di cose.

Le due opzioni che elenchi non si escludono a vicenda; puoi avere un livello DAO / Repository a cui accedi tramite qualche interfaccia / API, mentre le implementazioni concrete vengono iniettate in fase di esecuzione per soddisfare le tue dipendenze.

Ad esempio, scrivi un'interfaccia WidgetRepository che definisce la parte widget dell'API di accesso ai dati. Puoi quindi fornire un FileSystemWidgetRepository , HibernateWidgetRepository , XmlWidgetRepository , JpaWidgetRepository , ecc. Che implementa la tua interfaccia.

La regola generale sarebbe quella di utilizzare un livello di astrazione il più alto possibile, pur soddisfacendo le vostre esigenze. Nell'elenco di esempio che ho fornito, un repository basato su JPA sarebbe il livello più alto perché astrasse anche il framework ORM.

È quindi possibile mantenere un riferimento WidgetRepository nei propri oggetti che ne fanno uso. Codice solo su questa interfaccia. Successivamente, crea un Dependency Injection come Spring , che inietterà un'implementazione concreta di WidgetRepository in fase di esecuzione basata su una configurazione XML o un meccanismo di cablaggio automatico.

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