Persistenza in Java
Negli anni passati, ho acquisito esperienza nel campo dell'astrazione di persistenza in Java, utilizzando concetti come EJB 2.0, Hibernate, JPA e quelli autoctoni. Mi sembravano avere una curva di apprendimento ripida e molta complessità. Inoltre, come grande fan di SQL, ho anche pensato che molti modelli di astrazione forniscano troppa astrazione su SQL, creando concetti come "criteri", "predicati", "restrizioni" che sono concetti molto buoni, ma non SQL.
L'idea generale dell'astrazione di persistenza in Java sembra essere basata sul modello relazionale Object, in cui gli RDBMS sono in qualche modo abbinati al mondo OO. Il dibattito ORM è sempre stato emotivo, poiché non sembra esistere un'unica soluzione adatta a tutti - se tale soluzione può persino esistere.
jOOQ
La mia personale preferenza su come evitare i problemi relativi agli ORM è di attenersi al mondo relazionale. Ora la scelta del paradigma del modello di dati non dovrebbe essere l'argomento di discussione in quanto è una preferenza personale, o una questione di quale modello di dati si adatta meglio a un problema concreto. La discussione che vorrei iniziare riguarda il mio strumento di persistenza chiamato jOOQ . Ho progettato jOOQ per fornire la maggior parte dei vantaggi offerti dai moderni strumenti di persistenza:
- Un linguaggio specifico di dominio basato su SQL
- Generazione del codice sorgente che associa lo schema del database sottostante a Java
- Supporto per molti RDBMS
Aggiunta di alcune funzionalità che hanno pochi strumenti di persistenza moderni (correggimi se sbaglio):
- Supporto per SQL complessi: unioni, selezioni nidificate, auto join, aliasing, clausole case, espressioni aritmetiche
- Supporto per SQL non standard - stored procedure, UDT, ENUMS, funzioni native, funzioni analitiche
Per ulteriori dettagli, consulta la pagina della documentazione: link . Vedrete che un approccio molto simile è implementato in Linq per C #, sebbene Linq non sia progettato esclusivamente per SQL.
La domanda
Ora, avendo detto che sono un grande fan di SQL, mi chiedo se altri sviluppatori condivideranno il mio entusiasmo per jOOQ (o Linq). Questo tipo di approccio all'astrazione di persistenza è fattibile? Quali sono i vantaggi / svantaggi che potresti vedere? Come potrei migliorare jOOQ e cosa manca nella tua opinione? Dove ho sbagliato, concettualmente o praticamente?
Apprezzate le risposte critiche ma costruttive
Capisco che il dibattito sia emotivo. Ci sono molti ottimi strumenti là fuori che fanno già cose simili. Quello che mi interessa è un feedback critico ma costruttivo, basato sulla tua esperienza personale o sugli articoli che potresti aver letto.