IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Entity Framework et architecture


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut Entity Framework et architecture
    Bonjour,

    Je m'intéresse depuis peu au Entity Framework, dans une architecture MVC, Ntier si possible.

    Je ne sais pas trop comment architecturer mon application globalement... donc j'aimerai un retour d'expérience.

    Globalement, j'ai déjà 2 projets :

    MonApp.Web (application web)
    MonApp.Common (objet commun à toute l'application)
    MonApp.Model (là sont mes objets métiers qui vont transiter entre les couches)

    Ensuite, evidemment :
    MonApp.SQLData (qui comprendra mon EDM)

    Là, j'aimerai pouvoir ajouter une couche service et les interfaces qui vont avec.

    Je me demande si mon MonApp.Model ne sera pas trop en redondance avec les EntityObject généré par l'EDM....

    Qu'en pensez vous ?

  2. #2
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Il sera forcement redondant, mais la vraie question est de savoir quel interet a pour toi de pouvoir différencier ces classes.

    Vu la maniére dont tu veux créer ton architecture, il semblerait qu'il soit important pour toi de pouvoir changer de fournisseur de données.

  3. #3
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    On peut mélanger N-Tiers et MVC?
    Quand on fait du MVC avec VS2010 on oublie totalement les couches du N-Tiers. MVC n'est pas une architecture en couches.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Effectivement, je tente de concevoir une application la plus flexible et évolutive possible, car en effet, mes sources de données peuvent être amenées à être changé.

    Pour ce qui est du MVC et de l'architecture en couche, je ne vois pas ou est l'incohérence

    De plus, je fais du MVC avec du VS 2008

  5. #5
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Alors le prix de la flexibilité et de l'evolutivité est à mon avis dans la redondance de certaines informations. Car tu vas différencier les objets issus de ton model de ceux traités par ta base. Et par conséquent , à tes yeux ils seront différents même si semblables dans le code à un instant donné.

    Maintenant si d'autres ont des idées la dessus,n'hésitez pas à intervenir, il y des fois ou je dis des c***** aussi..

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut Crée un répertoire à part (ou une DLL)
    Salut,

    Tu peux créer un répertoire Objects dans lequel tu rangeras tes couches

    Objects
    DataLayer
    BusinessLayer
    CommonLayer
    ServiceLayer
    PresentationLayer
    ... PuristeLayer genre : ErrorLayer (qui peut être dans CommonLayer)
    ... AmoureuxDesCouchesLayer : N'en rajoute pas trop quand même

    Bien sûr, si tu utilises Entity Framework, la couche Domain disparait puisqu'elle est encapsulée dans ton modèle.

    Si tu travailles avec TeamSystem sur un gros projet à beaucoup de développeurs, mets tes couches dans des DLL séparées et mets un gars sur chacune d'elles et échange les couches entre les gars à chaque itération (pour éviter que la routine s'installe).

    Le développement en couches n'a rien à voir avec la technologie d'affichage des pages (qu'elles soient web ou winform).

    ++

    Laurent

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Yo,
    Citation Envoyé par Laurent Jordi Voir le message
    échange les couches entre les gars à chaque itération (pour éviter que la routine s'installe).
    Vous en faite des trucs sympas entre vous

    Citation Envoyé par Laurent Jordi Voir le message
    Le développement en couches n'a rien à voir avec la technologie d'affichage des pages (qu'elles soient web ou winform).
    Les architectures 3-Tiers sont indépendantes de l'interface.

    Une fois encore, il me semble que N-tiers et MVC sont incompatibles tout simplement parce qu'il n'y a pas de couches. Qqn aurait-il un exemple du contraire?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Je dis peut être une bétise, mais MVC ne serait pas un faite un regroupement de plusieurs couche dans la partie Model, View et Controller?

  9. #9
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Mmmh c'est ce que j'aurais tendance à penser aussi. Mais peut être comme toi à tort..

    Ensuite, je pense que les standards sont aussi faits pour improviser dessus et en faire ce dont bon on semble. Si on veut faire du mvc et le saupoudré de couches à la sauce 3 tiers... pourquoi pas..

    (je sens que je vais m'amener les foudres des puristes du design pattern lá.. mais bon! )

  10. #10
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Une fois encore, il me semble que N-tiers et MVC sont incompatibles tout simplement parce qu'il n'y a pas de couches. Qqn aurait-il un exemple du contraire?
    On va relancer le débat la-dessus, mais tu parles de tiers (découpage physique) ou de couches (découpage logique) ?

    (et oui, j'ai probablement des exemples pour les deux, mon capitaine )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je suis très intéresse par cette question. Je pensais mettre dans un projet les techno Entity Framework que je prévoyais pour la DAL uniquement

    et le MVC en guise d'ordonnanceur pour câbler et ordonnancer les appels de service.

    Déjà deux remarques :
    Les entities ne sont pas de simple poco en ce sens ou ils embarquent des propriétés supplémentaire comme le entityKey (sorte d'identifieur d'objet) et le EntityState permettant de savoir si l'objet est attaché au nom au modèle etc....

    J'ai donc disposé des assembleurs a l'intersections de chaque couche.

    Concernant la jonction entre ma DAL et mes services je voyais un assembler transformant des poco en entities vice et versa

    Concernant la jonction entre mes service et MVC... et bien là je ne sais pas encore.

    Ce projet est totalement ludique, il me permet juste d'apprendre a maitriser des techno que les frileux du boulot ne veulent même pas voir. Je suis donc open sur les choix

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    ..Une fois encore, il me semble que N-tiers et MVC sont incompatibles tout simplement parce qu'il n'y a pas de couches. Qqn aurait-il un exemple du contraire?..
    Je n'ai pas d'exemple, mais je me pose également la question. en allant sur le lien wikipedia que tu as mis il est également dit

    Citation Envoyé par Wikipedia
    Dans l'architecture 3-tiers, si une vue modifie les données, toutes les vues concernées par la modification doivent être mises à jour, d'où l'utilité de l'utilisation du MVC au niveau de la couche de présentation. La couche de présentation permet donc d'établir des règles du type "mettre à jour les vues concernant X si Y ou Z sont modifiés". Mais ces règles deviennent rapidement trop nombreuses et ingérables si les relations logiques sont trop élevées. Dans ce cas, un simple rafraîchissement des vues à intervalle régulier permet de surmonter aisément ce problème. Il s'agit d'ailleurs de la solution la plus répandue en architecture 3-tiers, l'utilisation du MVC étant très moderne et encore marginale.
    Qu'en pensez vous ?

  13. #13
    CUCARACHA
    Invité(e)
    Par défaut Entity Framework est (à mon sens) une DAL Parfaite mais..
    Salut,

    EF est une très bonne DataLayer toutefois, dans mes projets, j'encapsule tous les appels à EF dans une couche que j'appelle DataLayer qui est invoquée exclusivement par ma BusinessLayer et qui ne renvoie que des propriétés scalaires ou des objets de ma BuisinessLayer.Facades (qui sont tous sérializable au passage pour bien gérer la persistence temporaire dans le ViewState).

    Je ne te conseille pas de l'appuyer directement sur les entités pour alimenter ta couche de présentation car elles présentent beaucoup de limitations par rapport aux objets (par exemple tu ne peux pas faire deux foreach sur la même collection résultante d'une requête EF).

    J'ai connu des architectes qui ajoutaient encore plus de couche, c'est vrai que lorsque ça marche c'est génial mais je trouve ça un peu lourd.

    A toi de voir donc

    ++

    Laurent

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Merci Laurent, ça me conforte dans mon idée.

    Je vais utiliser EF uniquement pour la DAL.

    Je ne suis pas un adepte de la profusion de couches.

    Donc 3 couches me semblent raisonnables

    DAL : avec EF
    Businness : manipulant les entities fournis par EF et les transformant en poco classique pour la couche présentation
    Presentation : ne fonctionnant qu'avec les objets founies par la couche Business.

    La seule question que je me pose maintenant, c'est :
    Est il judicieux de faire du MVC pour mettre en relation ma Vue (ici la couche présentation) avec mon modèle (ici la couche business)

    I'm still working on it.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    Salut,

    j'encapsule tous les appels à EF dans une couche que j'appelle DataLayer qui est invoquée exclusivement par ma BusinessLayer et qui ne renvoie que des propriétés scalaires ou des objets de ma BuisinessLayer.Facades [...]

    Je ne te conseille pas de l'appuyer directement sur les entités pour alimenter ta couche de présentation car elles présentent beaucoup de limitations par rapport aux objets (par exemple tu ne peux pas faire deux foreach sur la même collection résultante d'une requête EF).
    Cette description ressemble au pattern MVVM (model-vue / vue model)

    Autre détail (corrigez si je me trompe): sous la version actuel d'entity, les entités contiennent également la logique de persistance (sera résolu dans la prochaine version après beaucoup de critiques sur ce point). La facon de procéder de Laurent Jordi permet donc d'empêcher la couche vue de bypasser la couche metier.

    Jette aussi un coup d'œil sur Ria services, cela te donnera peut-être des idées.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Merci Julien, je vais voir de ce pas.

  17. #17
    CUCARACHA
    Invité(e)
    Par défaut
    Citation Envoyé par Julien_Dufour Voir le message
    Cette description ressemble au pattern MVVM (model-vue / vue model)
    Je suis un Jedi, je ne me fie qu'à mon intuition...

    ++

    Laurent

    Bahhh aller, quitte à profiter de l'attrait du côté obscur qui permet d'accéder plus vite au pouvoir, je regarderais ce modèle...

  18. #18
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Cette description ressemble au pattern MVVM (model-vue / vue model)
    Mouais, pas vraiment...

    C'est l'utilisation d'un mapper pour convertir un objet donné en DTO pour le transferer aux couches hautes de l'appli

    Le MVVM est un pattern de presentation, et a plus ou moins besoin d'avoir des capacités de binding un peu avancées, ce qui fait qu'il est surtout utilisé en WPF/Silverlight...

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    C'est l'utilisation d'un mapper pour convertir un objet donné en DTO pour le transferer aux couches hautes de l'appli
    Ah oui, que moi je prévoyais de faire ça la main les transformations de DTO en entities...

    Va falloir que je trouve le juste milieu entre complexité et évolutivité(+ facilité de maintenance)

  20. #20
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Jettes un oeil sur automapper, alors

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

Discussions similaires

  1. Conseil architecture DAL sans Entity Framework
    Par touftouf57 dans le forum C#
    Réponses: 1
    Dernier message: 31/01/2014, 13h22
  2. Architecturer un projet MVC en N-tiers, avec entity framework
    Par Arnaud13 dans le forum ASP.NET MVC
    Réponses: 6
    Dernier message: 10/11/2013, 20h56
  3. Architecture : Silverlight - WCF - Entity Framework
    Par darkfrag dans le forum Silverlight
    Réponses: 6
    Dernier message: 02/12/2009, 17h52
  4. [ADO.NET Entity Framework] génération des tables
    Par anthyme dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/02/2008, 17h44
  5. Linq - Entity Framework
    Par Jfrancois57 dans le forum Framework .NET
    Réponses: 11
    Dernier message: 12/02/2008, 08h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo