Méthode à adopter : Entity Framework - 500 tables
Bonjour,
Je me demandais quelle était la meilleure façon d'architecturer un projet où l'on utilise Entity Framework avec un nombre très important de tables (entre 500 et 1000) ?
Pensez-vous qu'un unique fichier edmx suffit ? n'est-ce pas difficilement maintenable ?
Pensez-vous qu'il faille segmenter en plusieurs edmx ? dans ce cas, comment pourrait-on gérer des interdépendances entre ces edmx ? (c'est-à-dire si une table d'un fichier edmx a besoin d'une table d'un autre edmx)
Autre ?
Merci d'avance pour votre aide
Laurent
Projet à 500 tables et CodeFluent Entities
Bonjour,
Je me permets d'intervenir directement compte tenu de l'argument "extrêmement cher" évoqué dans cet échange pour écarter CodeFluent Entities.
Notre expérience des projets de ce type est la suivante :
- Un projet à 500 tables réalisé sans outil élevant le niveau d'abstraction coûte au final en général environ 4 à 5 K€ par table suivant la complexité du métier. Ce sont d'ailleurs les abaques des sociétés de services (un peu plus compliqué dans le détail mais c'est l'ordre de grandeur). On parle donc certainement d'un projet dont le budget est probablement 2 M€ ou plus.
- Le retour d'expérience de nos clients sur des projets de cette envergure est un coût moyen compris entre 2 et 3 K€ par table grand maximum (sans même parler du gain de maintenance qui est en fait le point fondamental compte tenu de la rapidité d'évolution des technologies).
On a donc probablement un retour sur investissement immédiat qui se situe entre 500 K€ et 1 M€ sur la seule phase de développement.
Un projet de ce type nécessite probablement une équipe de 5 à 10 développeurs et un coût de licence global pour l'équipe compris entre 20 K et 50 K€ suivant les options retenues.
Le décideur qui détient le chéquier ne mettra pas longtemps à approuver à partir du moment où il aura pu vérifier ces gains, par exemple sur la base d'un prototype. L'architecte en charge du projet porte certainement la responsabilité d'au moins proposer ces solutions, quitte à les écarter pour le projet en question sur la base d'arguments étayés par un prototype.
D'ailleurs, pour la petite histoire, les retours que nous avons des clients Entreprise sont plutôt que notre produit n'apparait "pas assez cher" pour ce qu'il fait. Nous avons "dû" créer une licence plus chère pour pouvoir remonter sur certains projets plus critiques et apparaitre crédible.
Quant à Entity Framework pour un projet de ce type, je vous souhaite bon courage.
Cette technologie n'a pas été éprouvée sur des projets de cette ampleur (et d'ailleurs globalement les ORMs atteignent en général leurs limites) et il y a des tas de problématiques que vous rencontrerez au cours du projet :
- Découpage du schéma pour travailler à plusieurs
- Manque de certaines fonctionnalités critiques
- Performance du visualiseur graphique
- Maitrise des requêtes générées en production (les DBA détestent les ORM, souvent à raison)
- Problématiques de verrouillage
- Mise à jour de la base de données dans un modèle qui va forcément évoluer (ce point d'évolution différentielle est totalement transparent avec CFE)
Pour les personnes techniques qui lisent l'Anglais, je conseille ce document http://www.codefluententities.com/do...0Framework.pdf . A la fin, vous y trouverez un ensemble de questions majeures posées sur Stack Overflow par de vrais développeurs, confrontés aux vrais problèmes, et auxquelles aucune réponse n'est apportée aujourd'hui. Il est très probable que vous arriviez dans les mêmes impasses avec votre projet.
Donc, sans même parler du coût, je ne conseillerai pas de partir sur Entity Framework pour un projet de ce type. Les ORM sont bien pour de petits développements où le développeur peut totalement s'abstraire des problématiques de base de données.
Et nous avons chez SoftFluent plus de 50 ans de présence cumulée au sein de la société Microsoft... donc pensez bien que si nous pouvions faire reposer l'accès aux données sur Entity Framework aujourd'hui, nous le ferions bien volontiers !
Daniel COHEN-ZARDI, Président de SoftFluent