Bonjour,
J'espere avoir mis au bon endrois, c'est de la conception mais fortement lié à C# et à EF.
Contexte:
Voila je me pose une question en tant que jeune architecte. Je travail souvent sur des projets ludiques qui me permettent de mettre en pratique des techniques, technologies, architectures etc.. Dans ce cas précis c'est un jeu basé sur des agents autonomes.
J'ai besoin d'une persistance des données en base de donnée type SQL.
Problèmatiques:
Je vois souvent la couche métier (Business BLL) utiliser directement les entités issus de la couche d'acces aux données (DAL). Objet DAL, j'ai envie de dire POCO mais pour moi EF permet déjà de récupérer des objets améliorés qui sont plus que de simples POCO?
On utilise donc des classes MonEntiteManager dans la couche BLL pour les manipuler. Ca marche bien pour des applications qui traitent des documents, la plupart des applications d'ailleurs.
Mon problème c'est que j'ai une application fortement orienté objet qui a été pensé de cette facon. Cela implique des entités actives qui évoluent bref qui utilisent beaucoup de conceptes objets.
Je voudrais avoir votre avis sur des bonnes pratiques:
- Avec Manager
Uiliser quand meme des "Manager" d'entités et travailler avec les entités du DAL et les manipuler. On perd les avantages d'une architecture orienté objet, il y a plus de MonEntite.Action(). Ca alourdi le code je trouve et on perd le coté intuitif naturel.
Exemple:
Voiture.Garer() devient VoitureManager.Garer(MaVoiture)- Utiliser partial
Avec Entity Framework, les objets générés sont partial, peut-on dans la couche BLL leur ajouter des methodes? l'avantage c'est d'utiliser directement les objets générés par EF. Le problème je crois c'est de devoir les mettre dans le meme namespace? Du coup on peut plus séparer les couches.
J'ai vu ca pour ajouter des propriétés calculés ou quelques methodes simples. Cette technique doit rester dans la couche DAL (meme namespace) pour améliorer de simple POCO en objet utilisable par la couche métier et a manipuler avec des managers pour ne pas mettre de logique métier trop lourde. Ca semble pas la solution dans mon cas.- 2 modeles
- Héritage
Ca ressemble au partial mais les objets récupérés directement par EF sont plus compatibles.- Encapsulation
Dans le meme esprit on encapsule les objets DAL dans des objets BLL pour les décorer.
Ca demande dans les 2 cas des conversions pour passer d'un modele à l'autre. J'aurai bien voulu éviter ca meme si ca semble la solution. Surtout si on a encore un ViewModel .. On peut avoir 3 fois la répétition de la meme entité finalement.
- Methodes d'extension
J'ai vu chez un client que dans quelques cas ils avaient utilisé des extentions pour rajouter des methodes. Ca marche pas si mal finalement mais ca fait beaucoup d'extensions pour tout faire. C'est peut etre pas le role des extensions?- Autres des idées?
Pour résumer: Meilleur pratique pour travailler avec des entités de meme nature dans des couches différentes?
Partager