Persistance en Java
Au cours des dernières années, j'ai acquis une expérience dans le domaine de l'abstraction de persistance en Java, en utilisant des concepts tels que EJB 2.0, Hibernate, JPA et ceux développés localement. Ils me semblaient avoir une courbe d'apprentissage abrupte et beaucoup de complexité. De plus, en tant que grand fan de SQL, je pensais également que de nombreux modèles d'abstraction fournissent trop d'abstraction sur SQL, créant des concepts tels que "critères", "prédicats", "restrictions" qui sont de très bons concepts, mais pas SQL.
L'idée générale de l'abstraction de persistance en Java semble être basée sur le modèle relationnel-objet, où les SGBDR sont en quelque sorte mis en correspondance avec le monde OO. Le débat ORM a toujours été émotionnel, car il ne semble pas exister de solution unique qui convienne à tout le monde - si une telle solution peut même exister.
jOOQ
Ma préférence personnelle sur la façon d'éviter les problèmes liés à l'ORM est de m'en tenir au monde relationnel. Maintenant, le choix du paradigme du modèle de données ne devrait pas être le sujet de discussion car c'est une préférence personnelle, ou une question de quel modèle de données convient le mieux à un problème concret. La discussion que je voudrais lancer concerne mon propre outil de persistance appelé jOOQ . J'ai conçu jOOQ pour offrir la plupart des avantages des outils de persistance modernes:
- Un langage spécifique au domaine basé sur SQL
- Génération de code source mappant le schéma de base de données sous-jacent à Java
- Prise en charge de nombreux SGBDR
Ajout de certaines fonctionnalités que peu d'outils de persistance modernes ont (corrigez-moi si je me trompe):
- Prise en charge de SQL complexe - unions, sélections imbriquées, auto-jointures, alias, clauses de casse, expressions arithmétiques
- Prise en charge de SQL non standard - procédures stockées, UDT, ENUMS, fonctions natives, fonctions analytiques
Veuillez consulter la page de documentation pour plus de détails: http://www.jooq.org/learn.php . Vous verrez qu'une approche très similaire est implémentée dans Linq pour C #, bien que Linq ne soit pas exclusivement conçu pour SQL.
La question
Maintenant, après avoir dit que je suis un grand fan de SQL, je me demande si d'autres développeurs partageront mon enthousiasme pour jOOQ (ou Linq). Ce type d'approche de l'abstraction de persistance est-il viable? Quels sont les avantages / inconvénients que vous pourriez voir? Comment pourrais-je améliorer jOOQ, et qu'est-ce qui manque à votre avis? Où je me suis trompé, conceptuellement ou pratiquement?
Réponses critiques mais constructives appréciées
Je comprends que le débat est émotionnel. Il existe de nombreux excellents outils qui font déjà des choses similaires. Ce qui m'intéresse, c'est une rétroaction critique mais constructive, basée sur votre propre expérience ou des articles que vous avez pu lire.