Persistenza in Java
Negli ultimi anni, ho acquisito esperienza nel campo dell'astrazione della persistenza in Java, usando concetti come EJB 2.0, Hibernate, JPA e quelli coltivati in casa. 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 forniscono troppa astrazione su SQL, creando concetti come "criteri", "predicati", "restrizioni" che sono concetti molto buoni, ma non SQL.
L'idea generale di astrazione della persistenza in Java sembra essere basata sul modello relazionale agli oggetti, in cui RDBMS è in qualche modo abbinato al mondo OO. Il dibattito ORM è sempre stato emotivo, in quanto non sembra esistere un'unica soluzione adatta a tutti, se tale soluzione può persino esistere.
jOOQ
La mia preferenza personale su come evitare i problemi relativi all'ORM è 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 offrire la maggior parte dei vantaggi dei moderni strumenti di persistenza:
- Un linguaggio specifico di dominio basato su SQL
- Generazione di codice sorgente mappando lo schema del database sottostante su Java
- Supporto per molti RDBMS
Aggiunta di alcune funzionalità che pochi moderni strumenti di persistenza hanno (correggimi se sbaglio):
- Supporto per SQL complessi: unioni, selezioni nidificate, self-join, aliasing, clausole case, espressioni aritmetiche
- Supporto per SQL non standard: stored procedure, UDT, ENUMS, funzioni native, funzioni analitiche
Si prega di considerare la pagina della documentazione per maggiori dettagli: http://www.jooq.org/learn.php . Vedrai che un approccio molto simile è implementato in Linq per C #, sebbene Linq non sia progettato esclusivamente per SQL.
La domanda
Ora, 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 della persistenza è praticabile? Quali sono i vantaggi / gli svantaggi che potresti vedere? Come potrei migliorare jOOQ e cosa manca secondo te? Dove ho sbagliato, concettualmente o praticamente?
Sono state apprezzate risposte critiche ma costruttive
Capisco che il dibattito è 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 o articoli che potresti aver letto.