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

Dotnet Discussion :

[WPF][Archi] Peut on combiner 3-tiers et MVVM, aperçu de ma solution.


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut [WPF][Archi] Peut on combiner 3-tiers et MVVM, aperçu de ma solution.
    Bonjour à tous,

    Débutant en C#/WPF, je me pose quelques questions sur l'architecture de mon application.
    Je voudrais mixer une Archi "3-tiers" et utiliser la méthodologie (ou design) MVVM.
    Je voudrais donc savoir si c'est compatible et si ce n'est génant (ou déconseillé).

    Vouici un aperçu de ma solution ainsi que des références.

    Par avance, merci.

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Non ce n'est pas gênant et heureusement par contre il y a une erreur de langage entre ton schéma et le terme tiers.

    Ton schéma montre des couches : ici du 3 couches + 1 (transverse = Tools + Entités) et non 3-tiers.

    Sinon j'ajoute un point de réflexion qui me dérange sur cette utilisation du MVVM qui est faite assez souvent (par rapport au MVP que j'ai pas mal utilisé).
    Dans le cas du MVP, le M(odel) n'était pas dans la couche GUI et car le but était de séparer la représentation des données (Model) dans la vue (en gros les données manipulables par les vues) et la présentation des données faite les V(ues). Le model était alors dans la couche Controller (entre GUI et BLL) ce qui présente l'énorme avantage d'avoir une représentation des données modifiables indépendantes des vues. Ce qui permet notamment de ne pas être lié à la techno de présentation...

    Donc qu'en est-il pour le MVVM ? Pour moi c'est absurde d'utiliser le MVVM comme présenté ici.

    Désolé de m'être étendu !!!

  3. #3
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour Ostenhard.

    Je ne suis pas certain de ce que tu veux dire. MVVM = model, viewmodel, view. Ici, la vue (XAML + un peu C#) et le viewmodel (tiers - voire couche - présentant des objets directement bindables par l'UI, des commandes, etc) sont rangés dans l'UI, la BLL fait office de model. Le fait que le VM appartienne à l'UI est pour moi logique car les objets de celles-ci sont intimement liés à l'UI : si tu as besoin d'une combobox dans la vue, tu crées dans le VM une propriété offrant une liste de chaînes ou objets à afficher dans la combobox. Si tu veux changer ta vue en profondeur, tu dois changer au moins partiellement la VM, la BLL restant bien entendu intacte (en théorie du moins).

    Tu penses donc qu'il faudrait ajouter une couche données intermédiaire entre la BLL et le viewmodel, alors que le viewmodel a déjà pour tâcher de créer des objets intermédiaires servant de représentations adaptées à la vue des objets métiers ? Pourquoi ce niveau d'indirection supplémentaire ? En effet, de deux choses l'une : soit tu as des objets BLL directement manipulables par la vue, soit quand ils ne le sont pas tu vas de toute façon devoir créer des représentations dans la VM.

    Il faut comprendre qu'une VM contient plusieurs objets de tailles diverses. SI on imagine une appli commerciale, on aura par exemple :
    * Un ListeClientsVM qui sera intimement lié à la vue car les données et commandes qu'il exposera seront directement dépendants des infos et actions présentées par la vue.
    * Un ClientVM qui offre des propriétés Nom, Prénom, LigneAdresse1, etc. Si tu changes ta vue, il y a peu de chances que cet objet doive changer car il peut être utilisé aussi bien pour un simple aperçu, une vue détaillée ou une vue avec édition. Au pire auras-tu besoin d'ajouter ou supprimer une ou deux propriétés (par exemple, une représentation textuelle raccourcie) mais, dans l'essentiel, cet objet bougera peu.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut
    Ci je résume bien:
    @ostenhard: N'est pas d'accord avec la structure que je présente.
    @DonQuiche: Plutôt d'accord.

    Comme je l'ai dit, je débute en C#. J'utilise le 3 couches (GUI/BLL/DAL) et j'ai regardé vite fait le MVVM hier.
    Afin d'être sûr d'avoir compris, j'ai réalisé cette maquette pour voir si j'avais bien serné les choses.

    Hors j'ai un petit doute, ne devrait t'il pas y avoir une sous couche model dans le projet GUI?Ceci afin de rajouter des entités qui hérite de mes entités classiques mais qui implémente INotifyPropertyChanged?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par takinelinfo Voir le message
    Ci je résume bien:
    @ostenhard: N'est pas d'accord avec la structure que je présente.
    Il est pas d'accord car quand on dit N-tiers, c'est que les N couches sont séparées physiquement.

    Citation Envoyé par takinelinfo Voir le message
    Hors j'ai un petit doute, ne devrait t'il pas y avoir une sous couche model dans le projet GUI?Ceci afin de rajouter des entités qui hérite de mes entités classiques mais qui implémente INotifyPropertyChanged?
    En fait, ca y est implicitement, ce sont les proxy générés par Visual Studio pour accéder à ta BLL via WCF

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Euh... ok, je vois mieux la philosophie !
    Il n'empêche que je trouve que le ViewModel pour tout ce qu'on y met est très (trop ?) lié à la techno de présentation. Plus il y aura de choses dedans, plus l'effort de test sera important et non automatisable si trop lié à la techno de présentation, mon interrogation est là !

Discussions similaires

  1. Combiner 3 tiers architecture avec MVC
    Par medirama dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/06/2014, 09h58
  2. Réponses: 8
    Dernier message: 03/08/2009, 07h36
  3. Tutoriels pour WPF . . . Un peut plus poussés que le "Hello World"
    Par smyley dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 06/01/2008, 12h23
  4. Utiliser un pointeur IntPtr d'une BitmapSource WPF - que peut-on faire avec ça ?
    Par BruceWayne dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 01/06/2007, 18h24
  5. Réponses: 4
    Dernier message: 13/07/2005, 18h28

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