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

Langage PHP Discussion :

Design pattern MVC et point d'entrée


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 14
    Points
    14
    Par défaut Design pattern MVC et point d'entrée
    Bonjour,

    Après avoir lu cet article se penchant sur le Modèle du design pattern MVC, en le décomposant en plusieurs éléments, une question m'est venu: comment faire la liste d'un modèle (par exemple la liste des posts, dans l'article) si seul le modèle est autorisé accéder la base de données?

    Car si l'on créait un contrôleur pour lister l'ensemble des posts, il faudra que celui-ci est accès a la bdd, non?

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    J'ai rapidement parcouru sa présentation et je pense qu'il est incomplet. Ce qu'il présente c'est une architecture n-tiers et pas MVC.
    Dans son schéma chaque couche ne communique qu'avec celles qui sont directement avoisinantes.
    Or le MVC c'est plus ceci :


    Pour ta problématique, tu peux tout à fait te créer un objet dans le Modèle qui se chargerait d'extraire la liste de tous les posts. Une fois les données extraites, à la demande du contrôleur, ce dernier les passe à la vue pour la mise en forme. Il est même possible que la vue se charge d'aller récupérer ses données auprès du modèle (plus rare, je l'admets)

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Comment faire pour avoir une indépendance complète entre l'application et le support des données (et donc que seul le modèle est accès au support)?

    Faut-il que tous les modèles implémentent une interface avec des méthodes comme save(), delete() et list() ?
    Mais que renverrai list()? une liste des id ou une liste d'instances du modèle?
    Mais je trouve ça bizarre un modèle dont une de ces méthode renverrai une liste d'instances.

    Comment ça se fait habituellement?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par rgamor Voir le message
    Comment faire pour avoir une indépendance complète entre l'application et le support des données (et donc que seul le modèle est accès au support)?
    Normalement, le modèle doit être le seul à accéder aux données. Dès qu'un objet au sein de l'application a besoin de données, il doit faire appel à une méthode du modèle.
    N'oublie pas que le modèle peut être vaste. Il peut très bien se diviser et se sub-divisier afin de satisfaire toutes les formes de demandes (en Core, BackOffice, FrontOffice...). C'est à toi à organiser logiquement ta couche métier.
    Généralement chaque brique du modèle sera sur un espace de nom qui lui est propre.

    Citation Envoyé par rgamor Voir le message
    Faut-il que tous les modèles implémentent une interface avec des méthodes comme save(), delete() et list() ?
    Surtout pas, c'est beaucoup trop rigide. D'ailleurs tu peux très bien avoir des objets persistants mais avec des actions limitées : suppression interdite par exemple.
    Donc une interface trop vaste va être vite problématique.

    Citation Envoyé par rgamor Voir le message
    Mais que renverrai list()? une liste des id ou une liste d'instances du modèle?
    Mais je trouve ça bizarre un modèle dont une de ces méthode renverrai une liste d'instances.

    Comment ça se fait habituellement?
    list() peut te renvoyer un tableau avec les données de ton extraction ou un tableau d'instantces d'un autre objet du modèle. Le modèle peut heureusement faire appel à d'autres parties du modèle.
    Bref, tu récupères ce dont tu as besoin pour répondre à ta problématique.
    Le modèle peut très bien récupérer des données, les transformer et te les renvoyer transformées. Le modèle doit être souple dans la mesure où c'est cette couche qui encapsule toute la complexité du métier.

    Et habituellement, il n'y a pas de recette miracle, tout se discute et en fonction des contraintes tu adaptes.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Surtout pas, c'est beaucoup trop rigide. D'ailleurs tu peux très bien avoir des objets persistants mais avec des actions limitées : suppression interdite par exemple.
    Donc une interface trop vaste va être vite problématique.
    Je comprends en quoi c'est trop rigide, pour moi toutes ces méthodes doivent être implémenter, et si la suppression est interdite c'est plus à une couche du genre user control de s'en préoccuper et puis si vraiment t'en veux pas tu la code avec un return false ou une levé d’exception.

    Et habituellement, il n'y a pas de recette miracle, tout se discute et en fonction des contraintes tu adaptes.
    Y'a bien une technique plus ou moins générique vu le nombre de blog, de forum sur le web qui doivent forcément à un moment afficher une liste d'articles ou de sujets

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/10/2014, 16h32
  2. Design pattern MVC référencement
    Par Invité dans le forum Référencement
    Réponses: 1
    Dernier message: 26/06/2013, 10h20
  3. Design Pattern MVC en Java
    Par JCD21 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 02/03/2012, 13h10
  4. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  5. Problème d'accessibilité avec le design patterns MVC
    Par radical_bombtracks dans le forum JSF
    Réponses: 5
    Dernier message: 24/07/2007, 13h15

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