A mon humble avis EF Code-First est une hérésie pour faire plaisir à certains. En effet cela ne fait pas gagner de temps de dev et à mon avis permet uniquement au gens ne maitrisant pas SQL de faire des d’application. Mais peut-on vraiment faire une application sans connaitre SQL ? Je pense même au final que l’on perd du temps à cause de l’effet boite noire que tu décris, des différents problèmes/limitations auxquels on peut être confrontés (il suffit de regarder le nombre important de questions sur ce forum ou d’autres) et du temps de monté en compétence sur la techno afin de bien l’utiliser.
L’approche Model-First est déjà plus intéressante puisqu’elle permet de générer une quantité plus ou moins importante de code à partir d’un modèle (même si celui-ci est finalement assez pauvre, mais après tout EF n’est qu’un ORM). Si vous partez sur cette approche je vous conseille de regarder ce que propose Matthieu Mezil.
Les DTO sont également un truc dont je ne comprends pas l’intérêt, en tout cas tels qu’ils sont utilisés dans de nombreux projets. La programmation orientée objet indique qu’un objet contient des données (propriétés) et des comportements (méthodes). A force de faire des DTO, des classes pour la validation, des repository, des factory, etc., et de vouloir suivre "les bonnes pratiques" en faisant des interfaces sans aucun sens dans l’unique but de faire de l’IOC et de pouvoir mettre des petits bouchons (stub) un peu partout, on se retrouve vite avec des modèles anémiques et difficilement maintenable. (J'extrapôle un peu par rapport à vos dire mais malheureusement on voit cela tellement souvent)
Ecrire un T4 pour générer du code aussi important que celui-ci (il s’agit tout de même des fondations de l’application) n’est pas aisé. Il y a de nombreux cas à gérer et la combinatoire est très compliquée sauf si le code que l’on génère ne fait presque rien (mais les projets évolue et on souhaite toujours générer plus de code). De plus on se retrouve rapidement à le modifier pour l’adapter à chaque projet. Par exemple si je souhaite tracer l’appel aux méthodes ou ajouter un mécanisme de cache (ou les 2 en même temps) il faut créer plusieurs version du template et bien évidemment les maintenir. On se retrouve donc à passer beaucoup de temps sur l’écriture de ces Templates et donc moins sur l’application en elle-même (et ce à chaque projet).
Une approche basée sur CodeDom ou toute autre représentation en mémoire du code est beaucoup plus intéressante puisqu’elle permet de générer le code « de base » puis d’y ajouter des comportements de manière unitaire. Par exemple pour ajouter des traces il suffit de parcourir la représentation du code et de la modifier. Une fois tous les traitements effectués on génère les fichiers. De plus on peut patcher la génération du code de base sans impacter les « extensions », la maintenance est donc simplifiée. Par contre le coût initial pour mettre en place la première solution est plus important.
Les ORM génère du code dynamiquement. Je ne dis pas que cela est mal, mais je pense que les procédures stockées ont encore de nombreux avantages :
- Modifiable sans recompiler l’application
- Un DBA peut faire son taf plus facilement puisqu’il a toutes les cartes en main
- Abstraction de la structure de la base de données pour l’application
- Permission plus fine pour l’application
- Totalement prédictible sans lancer l’application
Parfois on n’a pas le choix car le SGBD ne supporte pas les procs stock

D’un autre côté le développeur n’a pas envie d’écrire de la plomberie (même si ça occupe les développeurs des sociétés de service…). Personnellement je préfère coder des choses où il y a une vraie valeur.
Doit-on forcément tout faire à la main ou utiliser un ORM ? La réponse est non. En .NET il y a par exemple CodeFluent Entities, un générateur de code basé avec une approche Model-First, qui utilise des proc stock et ADO.NET et dont tout le code est statique/prédictible (aucune requête n’est généré dynamiquement à l’exécution).
Tu peux également regarder les ORM lite, comme
Dapper, qui traitent le strict minimum de choses, mais qui le font bien et simplement. Tomlev a écrit un article sur Dapper si tu souhaites plus d'information
http://tlevesque.developpez.com/tuto...s-avec-dapper/Comme toujours chaque solution à ses avantages et ses inconvénients. A toi de peser le pour et le contre pour ton besoin et de faire un choix.
4 |
0 |