Génial, il propose l'idée de tout recoder à la main ?
Je vois rien dans ce qu'il propose qui est une réelle différence avec le système actuel à part que le sien est complétement "figé" et lie complétement l'interface avec son interface de communication avec la base de données. Mais attendez .... ca ressemblerait pas à JPA avec les annotations ?
Franchement quit à faire du SQL, autant partir sur MyBatis.
Apache Cayenne me semble également intéressant mais je n'ai pas eu l'occasion de le mettre en pratique.
Bon lisons l'article, "ne jugeons pas un livre à sa couverture" m'a-t-on dit.
Envoyé par
Yegor Bugayenko
I, being a reader of posts, have to deal with two components: 1) the ORM and 2) the "obtruncated" object returned to me. The behavior I'm interacting with is supposed to be provided through a single entry point, which is an object in OOP. In the case of ORM, I'm getting this behavior via two entry points — the ORM and the "thing", which we can't even call an object.
Because of this terrible and offensive violation of the object-oriented paradigm, we have a lot of practical issues already mentioned in respected publications. I can only add a few more.
La critique qu'il porte aux ORMs c'est juste son fonctionnement en mode service, dans ce cas il peut rajouter SOAP et REST dans le panier... Si quelqu'un a un réel argument contre la SOA, je veux bien l'entendre mais qu'on ne tienne pas un grief contre un ORM parce que c'est un service ...
Envoyé par
Yegor Bugayenko
SQL Is Not Hidden
Le plus mauvais argument qui soit : je fais les choses mal alors c'est l'outil qui a un défaut. L'huile ca tâche alors retirons l'huile des moteurs ... Encore et toujours un problème de vision en "service". Le but du framework n'est pas d'implémenter la logique métier mais de l'utiliser pour implémenter la logique métier.
Sinon il y a les applications Forms avec des procédures stockées. On serait presque à se demander pourquoi les Forms ne sont pas aussi populaires ...
Envoyé par
Yegor Bugayenko
Difficult to Test
pour Hibernate, il n'y a aucune difficulté à bouchonner/simuler de telles interfaces. Mais laissons de côté l'utilisation d'un framework/langage en particulier. Comment compte-t-il simplifier cela en attaquant directement la base de données ? En bouchonnant/simulant toutes les interfaces JDBC ? Je vous laisse songer à la différence du nombre de méthode entre les interfaces Hibernate et celles de JDBC ...
Envoyé par
Yegor Bugayenko
What About Performance?
Le monsieur nous propose une version qui interroge la base à chaque getter/setter ... A ce problème, il propose de rajouter une surcouche (encore et toujours non-agnostique) qui génère un cache. Il faudra compteur encore deux classes de plus pour un seul concept (entité/table/interface/objet de domaine).
Envoyé par
Yegor Bugayenko
What About Transactions?
Il propose que chaque objet dispose de sa propre (sous-)transaction. Pourquoi pas, mais dans ce cas on reporte toute la responsabilité sur un unique objet quand parfois on veut traiter un ensemble. Encore une nouvelle instance à créer en perspective ...
En alternative, il nous propose l'encapsulation dans un "Callable" comme si les transactions étaient nécessairement limité par appel d'un simple morceau de code quand parfois, une orchestration entre plusieurs systèmes ou délimité par un contexte (ex : une requête) est nécessaire.
Bon l'article est bouclé et revenons aux problèmes posés par les ORMs.
Envoyé par
Yegor Bugayenko
I, being a reader of posts, have to deal with two components: 1) the ORM and 2) the "obtruncated" object returned to me.
Solution proposée : au minimum deux composants très spécialisés par concept ... Je commente pas plus.
Envoyé par
Yegor Bugayenko
SQL Is Not Hidden
Solution proposée : écrire soit même tout le SQL.
Vous souhaitez ajouter le support d'une nouvelle base de données ? Il suffit de dupliquer toutes les classes existantes ...
Envoyé par
Yegor Bugayenko
Difficult to Test
Solution proposée : bouchonner/simuler les concepts mais y a-t-il encore quelque chose à tester ? Sinon c'est tout JDBC qu'il vous faudra bouchonner/simuler ...
Envoyé par
Yegor Bugayenko
What About Performance?
Au final compter 4-5 classes par concept et autant d'instance à créer pour chaque entrée. On rajoute un peu de requêtes crées à la volée sans aucun cache et ni même de support d'envoi groupé ("batch"
des requêtes. C'est sûr que les ORMs ont de gros problèmes de performance ...
Et quid de la performance de l'écriture d'une telle application ? A vu de nez, je dirais qu'en une semaine vous devriez avoir les "bases" d'un Pet Clinic fonctionnant sur unique SGBD. Choisissez bien dès le départ car pour en changer il va falloir revoir une bonne partie de vos classes.
Voici une petite liste de petites contraintes que je retiens (je vous laisse proposer votre propre liste):
- Aucune cohérence assurée entre la transaction et le modèle mémoire.
- Aucune possibilité d'extension sur la façon de travailler avec un concept.
- Ajouter un champ nécessitera d'impacter au minimum 4-5 classes.
- Aucune piste pour gérer des mises à jour et les relations.
Quid des griefs contre les ORMs:
- De mauvaises performances : le seul travaille de l'ORM c'est le mapping, et lui sera toujours nécessaire. Le reste est entre les mains de l'utilisateur avec une facilité pour les choses simples et des points d'extensions plus ou moins complexes pour les besoins spécifiques.
- Non-encapsulation totale du SQL : on travaille avec un SGBD et il faudra toujours faire avec. Les concepts sous-jacents s'appliquent également aux couches supérieures. Par ailleurs, je ne vois pas l'ORM comme un encapsulateur du relationnel mais comme un facilitateur pour joindre le monde relationnel et l'objet. Ceux qui le vendent comme une encapsulation sont d'aussi mauvais vendeur que notre auteur.
Au final la vraie question, que veut-il encore nous vendre ? http://jdbc.jcabi.com/
Si vous souhaitez vraiment une solution simple et efficace, je vous propose
DbOomPS : Moi, je ne touche aucune rétro-commission sur
la ventel'utilisation des solutions que je vous propose.
5 |
0 |