Bonjour tout le monde !
En vue de migrer une application qui utilise les DataSet vers des Entités (pour profiter du modèle objet et non relationnel), je suis en train de faire une analyse sur Linq to Entities.
Voilà mon problème :
Je dispose d'une plate-forme (solution) avec 120 projets. Cela parrait beaucoup, mais en fait il y a 36 modules éclatés en 3 couches classiques (IHM, Métier, DAL). Chaque module représente un traitement spécifique (gestion des clients, fournisseurs, facturation, commandes, compta,...etc).
Les 12 projets restants représentent 4 applications (éclatées aussi en 3 couches) de gestion qui utilise + ou - les modules précédents.
Actuellement, certains modules sont très basiques et propose des services de base qu'il devront être implémenté par les applications (ou d'autres modules).
Par exemple, je dispose d'un module appelé "Pièce commerciale" qui représente de façon abstraite un "Bon de livraison", une "Facture", ...etc.
Le module "Facture" utilise donc le module "Pièce commerciale" et ajoute des fonctionnalités spécifiques à la facturation.
Avec les DataSet, la solution était simple :
Dans le module Facture je crée un DataSet typé "Facture" que j'utilise dans celui-ci (Nom, Prénom, Réglement) et que je peux utiliser dans le module "Pièce Commerciale".
Dans le module Bon de livraison je crée un DataSet typé "BonLivraison" que j'utilise dans celui-ci (Nom, Prénom, DateLivraison) et que je peux utiliser dans le module "Pièce Commerciale".
...etc
Dans le module Pièce commerciale quand à lui utilise des DataSet de façon générique. C'est à dire il manipule uniquement des données commune au pièces commerciales par exemple pour accéder au nom : pièceCommercialeTable["Nom"] (où pièceCommercialeTable est déclaré comme DataTable et peux contenir une instance de BonLivraison ou de Facture).
Cette solution bien évidemment pose un problème de typage de code au niveau de la pièce commerciale mais permet de factoriser en masse du code !!
Avec linq to entities :
Le problème est simple, il n'est pas possible de créer une classe abstraite PièceCommerciale dans le module "Pièce commerciale" et de la faire hériter dans d'autres modules (projets) "BonLivraison" et "Facture".
En plus la classe abstraite doit avoir au moins une clé unique, et dans mon cas c'est la classe qui hérite qui indique la clé primaire...
Aussi, le principe d'éclater le mapping des entités en 3 fichiers (csdl, ssdl, msdl) est interessant, mais il n'est pas possible de prendre le ssdl et msdl automatiquement générés et de les inclure dans d'autres projets (dans la couche DAL).
Question : Savez s'il est possible de faire de l'héritage d'entité entre différents modèles sur différents projets ? Si c'est pas le cas, croyez vous qu'il faut que je crée mes propres entités à la main ?
Bref, j'ai l'impression que linq to entities est un bon O/R mapping, mais il loin d'être la solution pour de gros projets ! C'est dommage que l'on doit l'utiliser uniquement dans le cadre de petit projets avec un seul modèle...
Merci de vos lumières !
Cordialement
Partager