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

MVC Discussion :

[MVC] Bien séparer les couches : validité du pattern ?


Sujet :

MVC

  1. #1
    Invité
    Invité(e)
    Par défaut [MVC] Bien séparer les couches : validité du pattern ?
    Salut à tous,

    Je débute en programmation d'applications web et je me suis donc intéressé de près aux design patterns utilisés pour ce genre d'application. Comme une application peut être divisée en trois "pôles" : Présentation, Données et Logique Applicative, le design pattern classique est une architecture 3 tiers.
    Et, si j'ai bien tout compris, l'objectif c'est de séparer au maximum ces 3 couches afin d'augmenter maintenabilité et évolutivité (par exemple avec le framework Spring en J2EE). Jusque là je pense que je suis. (arrêtez moi si je dis des bêtises quand même)

    Le problème c'est que dans beaucoup d'exemples et de tutoriaux que j'ai rencontré, à ces 3 couches qui sont censées être entièrement distinctes on ajoute un 4ème composant, en général appelé "modèle". On obtient donc l'architecture suivante :

    J'ai trouvé cette image sur ce site qui explique comment concevoir les applis web en Java.

    Concrètement ce "modèle de données" ne contient que des "objets métiers", des classes sans aucune logique applicative servant uniquement à stocker les données de l'application. Le problème c'est que ces classes sont partagées par TOUTES les couches de l'application.

    Pour moi c'est une grosse entorse à la séparation des différentes couches.
    J'aurais plutôt vu une architecture où chaque couche possèderait son propre modèle de données et les SEULES interactions possibles entre les couches doit se faire à l'aide d'interfaces.

    Je voudrais donc connaître l'avis d'autres personnes. Quel sera l'impact de ce genre d'architecture sur la maintenabilité de l'application et est-ce que c'est vraiment un modèle à suivre ou juste un détournement des architectures 3-tiers ?

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Le truc, c'est que les couches sont amenées à communiquer, sinon l'application ne sert à rien. Pour ce faire, il y a forcément des objets qui vont transiter entre les différentes couches.
    Il est logique que ces objets soient connus de chaque couche si on veut être en mesure de les passer, d'où l'utilité de cette couche transversale.

    Pour prendre l'exemple d'une opération simple, tu souhaites récupérer un utilisateur par son nom pour l'afficher dans une fenêtre, et ensuite le modifier et updater dans la base de données.

    Pour commencer, dans la couche transversale, tu crées une classe UserEntity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class UserEntity
    {
        int id;
        string nom;
        string password;
        ....
    }

    Dans la BL tu crées une classe ou des méthodes statiques de manipulation des users style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UserEntity GetUserByID( int idUser) //pour récupérer un utilisateur par son ID
    SaveUser( UserEntity user) //dans laquelle on teste la validité avant de procéder a l'enregistrement 
    ....
    Ces méthodes sont appelées par l'UI, soit directement, soit par le biais d'une interface.
    La couche transversale te permet de stocker les définitions des objets qui passent entre les deux couches, en l'occurrence, le UserEntity.

    Pourquoi penses-tu que c'est un problème? As-tu un exemple?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je ne pense pas forcément que ce soit un problème, je me posais juste la question.

    C'est vrai que, quand on y réfléchit, tant que ces objets ne possèdent pas de logique applicative et ne sont utilisés que pour définir un modèle de données, on conserve la séparation des couches.

    Le seul problème que je vois c'est au niveau de l'évolutivité, si on change le modèle de données, on est obligé de revoir et retester chacune des couches. Mais toucher au modèle de données ça revient à toucher à la conception profonde de l'application donc j'imagine que même si chaque couche avait son modèle de données propre, on devrait revoir et retester l'application de fond en comble quand même.

    Bon ben ça m'a fait du bien d'en parler. Je pense que je me suis convaincu moi-même que ce design pattern était "bon".
    Après c'est toujours le contexte qui permet de choisir.

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Quand tu parles de modification du modèle de données, tu parles de modification de la base de donnée?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Euh... oui et non.

    Je pensais pas spécialement à la base de données mais oui, j'imagine que si les objets échangés entre les couches changent alors les tables de la base de donnée changent aussi.

    Dans mes deux posts précédents "modèle de données" désigne cette couche transversale qui me posait problème au niveau de l'architecture (sur le schéma elle est appelée Domain Model Business Objects).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Patron MVC : bien séparer la vue.
    Par CompuTux dans le forum Langage
    Réponses: 10
    Dernier message: 01/02/2012, 07h30
  2. Réponses: 10
    Dernier message: 08/07/2007, 17h15
  3. [SWT][MVC] Comment séparer métier et présentation
    Par pyorg dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 27/08/2004, 18h21
  4. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12
  5. [TDataModule] Intérêt de séparer les accès aux données?
    Par Cornell dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/09/2003, 16h42

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