Qual è il modello HMVC?


130

Leggendo la documentazione di Kohana, ho scoperto che la differenza principale nella versione 3.0 è che segue il modello HMVC invece di MVC come fa la versione 2.x. La pagina su questo nei documenti di Kohana e quella su Wikipedia non mi hanno dato un'idea chiara.

Quindi domanda: qual è il modello HMVC e in cosa differisce da MVC?


30
Una discussione su questo stesso argomento ha avuto luogo all'interno dei forum di Kohana. Potrebbe esserti di aiuto: forum.kohanaframework.org/discussion/1681
Sampson,

Risposte:


86

Sam de Freyssinet (uno degli sviluppatori di Kohana) ha scritto un articolo piuttosto approfondito su HMVC , di cosa si tratta e come può essere utilizzato.

Il link è morto: nuovo link - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/


grazie per un buon collegamento, controlla anche questo javaworld.com/jw-07-2000/jw-0721-hmvc.html
Owais Qureshi


I collegamenti moriranno sempre! pubblica contenuti anziché link.
Loki,

58

Attualmente sto sviluppando il mio framework HMVC PHP 5.3 chiamato Alloy . Dal momento che sono fortemente investito e venduto su HMVC, ho pensato di poter offrire un punto di vista diverso e forse una spiegazione migliore del perché HMVC dovrebbe essere usato e dei vantaggi che ne derivano.

Il più grande vantaggio pratico dell'utilizzo di un'architettura HMVC è la "widgetizzazione" delle strutture di contenuto. Un esempio potrebbe essere la visualizzazione di commenti, valutazioni, feed RSS o blog di Twitter o la visualizzazione dei contenuti del carrello per un sito Web di e-commerce. È essenzialmente un contenuto che deve essere visualizzato su più pagine e possibilmente anche in luoghi diversi, a seconda del contesto della richiesta HTTP principale.

I framework MVC tradizionali in genere non forniscono una risposta diretta per questi tipi di strutture di contenuto, quindi le persone generalmente finiscono per duplicare e cambiare layout, usando helper personalizzati, creando le proprie strutture di widget o file di libreria o estraendo dati non correlati dai principali richiesti Controller per passare alla vista e renderizzare in parte. Nessuna di queste sono opzioni particolarmente buone, perché la responsabilità di rendere un determinato contenuto o di caricare i dati richiesti finisce per perdere in più aree e duplicarsi nei luoghi in cui viene utilizzato.

HMVC, o in particolare la capacità di inviare sotto-richieste a un Controller per gestire queste responsabilità è la soluzione ovvia. Se pensi a quello che stai facendo, si adatta perfettamente alla struttura del Controller. Devi caricare alcuni dati sui commenti e visualizzarli in formato HTML. Quindi invii una richiesta al controller dei commenti con alcuni parametri, interagisce con il modello, seleziona una vista e la vista visualizza il contenuto. L'unica differenza è che vuoi che i commenti vengano visualizzati in linea, sotto l'articolo del blog che l'utente sta visualizzando invece di una pagina di commenti completa completamente separata (anche se con un approccio HMVC, puoi effettivamente servire sia richieste interne che esterne con lo stesso controller e "kill due uccelli con una fava ", come dice il proverbio). A questo proposito, HMVC è in realtà solo un sottoprodotto naturale della ricerca di una maggiore modularità del codice, riutilizzabilità e mantenimento di una migliore separazione delle preoccupazioni. QUESTO è il punto di forza di HMVC.

Quindi, mentre l'articolo TechPortal di Sam de Freyssinet sul ridimensionamento con HMVC è interessante da pensare, non è dove il 90% + delle persone che usano i framework HMVC ne trarranno benefici reali, pratici e quotidiani.


5
Sì, è così che l'ho immaginato nell'uso del mondo reale, ma da questo punto di vista il nome non è del tutto appropriato poiché la H in HMVC è fuorviante (non esiste una vera gerarchia).
Matteo Riva,

2
Sì, hai un buon punto. In realtà condivido questo punto di vista e gli ho dato un altro nome - "Nested MVC" - in una presentazione che ho fatto su Alloy al Confoo 2011. È su Slideshare, slide # 20: slideshare.net/vlucas/alloy-hmvc-php- quadro
Vance Lucas,

In che modo HMVC gestirà la necessità di più resi dall'albero dei moduli? Ad esempio, fascicolazione del contenuto di testa / corpo / piè di pagina, dipendenze JS / Css e interrelazioni tra i moduli. Eventi? Ganci? Un framework di pagine singleton? Oggetti restituiti strutturati?
scipilot,

1
Questa risposta è una copia di wikipedia: / en.wikipedia.org/wiki/…
EricG

3
@EricG sembra che qualcuno abbia copiato la risposta che ho dato qui, e poi l'ha aggiunta a Wikipedia (non sono stato io). Controlla la sezione "Riferimenti" nella parte inferiore dell'articolo di Wikipedia - rimanda a questo commento.
Vance Lucas,

7

L'HMVC è strettamente correlato all'approccio "dispacciamento basato sui componenti" al dispacciamento. Fondamentalmente, invece di avere un singolo dispatcher, che delega a un controller, ogni controller può agire da solo come dispatcher. Questo ti dà una gerarchia di controller. Il design è più flessibile e causa una migliore incapsulamento del codice, ma a un prezzo di maggiore astrazione. Konstrukt è progettato attorno a questo modello.

Vedi anche questa risposta: /programming/115629/simplest-php-routing-framework/120411#120411


7

In Kohana, almeno, una richiesta HMVC è una richiesta HTTP che viene gestita "internamente": invece di essere emessa sulla rete, viene instradata, inviata e gestita dal framework stesso. La somiglianza dei nomi "HMVC" e "MVC" è confusa in quanto suggerisce una connessione sottostante tra i termini che in realtà non esistono: uno non è una variante minore o una modifica dell'altro, sono cose completamente diverse. (HMVC è anche descritto come Ajax senza la richiesta HTTP lato client.) L'enfasi di Kohana su e il supporto per "HMVC" significa che il framework ha un forte supporto per un'architettura orientata ai servizi basata su HTTP.

Il vantaggio di questo modello architettonico è che, poiché la stessa "convenzione di chiamata" viene utilizzata per richieste interne ed esterne, è banale convertire le richieste di servizi "interne" in richieste "esterne" o viceversa quando necessario.

Mentre questo è un modello architettonico ragionevole, dargli il proprio nome sembra superfluo (Symfony2 descrive lo stesso concetto di " sotto-richieste "), e in effetti il ​​nome sembra essere un termine improprio: non vi è alcun requisito particolare o necessità che le richieste formino un gerarchia (diversa dal grafico delle chiamate standard di ogni programma imperativo); le richieste potrebbero essere facilmente ricorsive, ad esempio.

[ Aggiornamento aprile 2011, marzo 2012: ampliato sulla risposta in risposta ai commenti.]


2
Essere in grado di convertire le richieste di servizio "interne" in menu di richieste "esterne" è possibile ridimensionare più facilmente se necessario, ovvero spostare alcuni moduli dell'applicazione sul proprio server.
Kim Prince,

1
sì, prova a implementare un servizio web interno con esso e senza di esso, solo per vedere se in realtà "non ha molta importanza".
Kemo,

@Kemo Penso che sia una bella architettura, penso solo che il nome sia confuso, e implica che Kohana stia facendo qualcosa di particolarmente insolito.
mjs,

Non sono sicuro di come la tua risposta sia stata utile. Non stai rispondendo alla domanda lamentandoti solo del nome e che non è necessario (il che va bene).
Dave,

4

HMVC è Hierarchical Model View Controller.In MVC normale ogni oggetto GUI ha il suo MVC, ma non esiste alcuna relazione tra l'oggetto GUI padre e l'oggetto GUI figlio a differenza di HMVC. In HMVC ogni oggetto GUI ha accesso ai suoi oggetti figlio e ogni oggetto figlio può accedere al suo oggetto genitore.

Quindi in ogni vista c'è una vista padre, attraverso la quale può accedere alla vista padre. Perché in ogni controller esiste un controller principale attraverso il quale può passare l'evento al controller principale (se l'evento non rientra nel suo ambito.)

Per la descrizione dei dettagli, fare clic qui

Il nuovo link è questo indirizzo


1
il segno di una buona risposta non è solo un collegamento senza altre informazioni o contesto. Per favore, puoi spendere la tua risposta e riassumere la parte pertinente del post collegato?
Kev

1
@Sanjay, per quale motivo hai cambiato la destinazione del collegamento dall'articolo HMVC a uno sullo stato di gwt per dispositivi mobili?
Brad Koch,

@ Koch..non ho cambiato link ... anche non so chi l'abbia cambiato .... a proposito l'ho collegato al link originale.
Sanjay Jain
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.