Quel est le modèle HMVC?


130

En lisant la documentation de Kohana, j'ai découvert que la principale différence dans la version 3.0 est qu'elle suit le modèle HMVC au lieu de MVC comme le fait la version 2.x. La page à ce sujet dans la documentation de Kohana et celle sur wikipedia ne m'ont pas vraiment donné une idée claire.

Alors question: quel est le modèle HMVC et en quoi diffère-t-il de MVC?


30
Une discussion sur ce sujet même a eu lieu dans les forums Kohana. Vous pouvez trouver cela utile: forum.kohanaframework.org/discussion/1681
Sampson

Réponses:


86

Sam de Freyssinet (l'un des développeurs de Kohana) a écrit un article assez approfondi sur HMVC , ce que c'est et comment il peut être utilisé.

Le lien est mort: Nouveau lien - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/


merci pour un bon lien, consultez
Owais Qureshi


Les liens mourront toujours! publier du contenu au lieu d'un lien.
Loki le

58

Je suis actuellement en train de développer mon propre framework PHP 5.3 HMVC appelé Alloy . Étant donné que je suis fortement investi et vendu sur HMVC, j'ai pensé que je pourrais offrir un point de vue différent, et peut-être une meilleure explication de la raison pour laquelle le HMVC devrait être utilisé et des avantages qu'il apporte.

Le plus grand avantage pratique de l'utilisation d'une architecture HMVC est la «widgetisation» des structures de contenu. Un exemple peut être des commentaires, des évaluations, des affichages de flux RSS sur Twitter ou un blog, ou l'affichage du contenu du panier pour un site Web de commerce électronique. Il s'agit essentiellement d'un élément de contenu qui doit être affiché sur plusieurs pages, et peut-être même à différents endroits, en fonction du contexte de la requête HTTP principale.

Les frameworks MVC traditionnels ne fournissent généralement pas de réponse directe pour ces types de structures de contenu, de sorte que les gens finissent généralement par dupliquer et changer de mise en page, en utilisant des assistants personnalisés, en créant leurs propres structures de widget ou fichiers de bibliothèque, ou en extrayant des données non liées à partir du principal demandé. Contrôleur pour passer à la vue et rendre dans un partiel. Aucune de ces options n'est particulièrement bonne, car la responsabilité de rendre un contenu particulier ou de charger les données requises finit par se répandre dans plusieurs zones et se dupliquer là où elle est utilisée.

HMVC, ou spécifiquement la capacité d'envoyer des sous-demandes à un contrôleur pour gérer ces responsabilités est la solution évidente. Si vous pensez à ce que vous faites, cela correspond exactement à la structure du contrôleur. Vous devez charger des données sur les commentaires et les afficher au format HTML. Vous envoyez donc une requête au contrôleur de commentaires avec quelques paramètres, il interagit avec le modèle, choisit une vue et la vue affiche le contenu. La seule différence est que vous voulez que les commentaires soient affichés en ligne, sous l'article de blog que l'utilisateur consulte au lieu d'une page de commentaires complète complètement séparée (bien qu'avec une approche HMVC, vous pouvez en fait servir des demandes internes et externes avec le même contrôleur et "tuer deux oiseaux avec une pierre ", comme on dit). À cet égard, Le HMVC n'est en réalité qu'un sous-produit naturel de la recherche d'une modularité accrue du code, d'une réutilisation et d'une meilleure séparation des préoccupations. CECI est le point de vente de HMVC.

Ainsi, bien que l'article TechPortal de Sam de Freyssinet sur la mise à l'échelle avec HMVC soit intéressant à réfléchir, ce n'est pas là que 90% + des personnes qui utilisent les frameworks HMVC vont en tirer des avantages réels, pratiques et quotidiens.


5
Oui, c'est ainsi que je l'ai imaginé dans le monde réel, mais de ce point de vue, le nom n'est pas tout à fait approprié car le H dans HMVC est trompeur (il n'y a pas de véritable hiérarchie).
Matteo Riva

2
Oui, vous faites un bon point. En fait, je partage ce point de vue et lui ai donné un autre nom - "Nested MVC" - dans une présentation que j'ai faite sur Alloy à Confoo 2011. C'est sur Slideshare, diapositive n ° 20: slideshare.net/vlucas/alloy-hmvc-php- framework
Vance Lucas

Comment HMVC gérerait-il le besoin de retours multiples de l'arborescence des modules? Par exemple, rassembler le contenu tête / corps / pied de page, les dépendances JS / Css et les interrelations entre les modules. Événements? Crochets? Un framework de page singleton? Objets de retour structurés?
scipilot

1
Cette réponse est une copie de wikipedia: / en.wikipedia.org/wiki/…
EricG

3
@EricG ressemble à quelqu'un a copié la réponse que j'ai donnée ici, puis l'a ajoutée à Wikipedia (ce n'était pas moi). Consultez la section "Références" au bas de l'article de Wikipédia - elle renvoie à ce commentaire.
Vance Lucas

7

Le HMVC est étroitement lié à l'approche «basée sur les composants» de la répartition. Fondamentalement, au lieu d'avoir un seul répartiteur, qui délègue à un contrôleur, chaque contrôleur peut agir comme un répartiteur lui-même. Cela vous donne une hiérarchie de contrôleurs. Le design est plus flexible et permet une meilleure encapsulation du code, mais à un prix d'abstraction plus élevé. Konstrukt est conçu autour de ce modèle.

Voir aussi cette réponse: /programming/115629/simplest-php-routing-framework/120411#120411


7

Dans Kohana, au moins, une requête HMVC est une requête HTTP qui est servie "en interne": au lieu d'être émise sur le réseau, elle est routée, distribuée et gérée par le framework lui-même. La similitude des noms "HMVC" et "MVC" prête à confusion en ce qu'elle suggère un lien sous-jacent entre les termes qui n'existe pas en fait: l'un n'est pas une variante mineure ou une modification de l'autre, ce sont des choses complètement différentes. (HMVC est également décrit comme Ajax sans la requête HTTP côté client.) L'accent mis par Kohana sur et la prise en charge de "HMVC" signifie que le framework prend en charge une architecture orientée service basée sur HTTP.

L'avantage de ce modèle architectural est que puisque la même «convention d'appel» est utilisée pour les requêtes internes et externes, il est trivial de convertir des requêtes de service «internes» en requêtes «externes» ou vice versa selon le besoin.

Bien qu'il s'agisse d'un modèle architectural raisonnable, lui donner son propre nom semble inutile (Symfony2 décrit le même concept de « sous-requêtes »), et en fait le nom semble être un abus de langage : il n'y a pas d'exigence ou de besoin particulier que les requêtes forment un hiérarchie (autre que le graphe d'appel standard de chaque programme impératif); les requêtes pourraient facilement être récursives, par exemple.

[ Mise à jour avril 2011, mars 2012: réponse détaillée aux commentaires.]


2
Être capable de convertir des demandes de service «internes» en demandes «externes», vous pouvez augmenter plus facilement si nécessaire, c'est-à-dire déplacer certains modules d'application vers leur propre serveur.
Kim Prince

1
ouais, essayez d'implémenter un service Web interne avec et sans lui, juste pour voir si cela "n'a pas vraiment d'importance".
Kemo

@Kemo Je pense que c'est une belle architecture, je pense juste que le nom est déroutant, et cela implique que Kohana fait quelque chose de particulièrement inhabituel.
mjs le

Je ne sais pas comment votre réponse est utile. Vous ne répondez pas à la question en vous plaignant simplement du nom et du fait que ce n'est pas nécessaire (ce qui est bien).
Dave

4

HMVC est Hierarchical Model View Controller.Dans le MVC normal, chaque objet GUI a son MVC.Mais il n'y a aucune relation entre l'objet GUI parent et l'objet GUI enfant contrairement à HMVC. Dans HMVC, chaque objet GUI a accès à ses objets enfants et chaque objet enfant peut accéder à son objet parent.

Ainsi, dans chaque vue, il y a une vue parent, à travers laquelle elle peut accéder à la vue parent. Car dans chaque contrôleur, il y a un contrôleur parent à travers lequel Il peut transmettre l'événement au contrôleur parent (si l'événement n'est pas dans sa portée.)

Pour plus de détails, veuillez cliquer ici

Le nouveau lien est cette adresse


1
la marque d'une bonne réponse n'est pas simplement un lien sans autre information ou contexte. Pouvez-vous développer votre réponse et résumer la partie pertinente du message lié?
Kev le

1
@Sanjay, une raison pour laquelle vous avez changé la destination du lien de l'article HMVC à un article sur l'état de gwt pour mobile?
Brad Koch

@ Koch..Je n'ai pas changé de lien ... même je ne sais pas qui l'a changé .... btw je l'ai lié au lien d'origine.
Sanjay Jain
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.