Hierarchical model–view–controller

From Wikipedia, the free encyclopedia
Jump to: navigation, search
The structure of an application with PAC.

Hierarchical model–view–controller (HMVC) is a software architectural pattern, a variation of model–view–controller (MVC) similar to presentation–abstraction–control (PAC), that was published in 2000 in an article[1] in JavaWorld Magazine, the authors apparently unaware[2] of PAC which was published 13 years earlier.

The controller has some oversight. The controller selects the model and then selects the view, so there is an approval mechanism by the controller. The model prevents the view from accessing the data source directly.



The largest practical benefit of using an HMVC architecture is the "widgetization" of content structures. An example might be comments, ratings, Twitter or blog RSS feed displays, or the display of shopping cart contents for an e-commerce website. It is essentially a piece of content that needs to be displayed across multiple pages, and possibly even in different places, depending on the context of the main HTTP request.

Traditional MVC frameworks generally don't provide a direct answer for these types of content structures, so people generally end up duplicating and switching layouts, using custom helpers, creating their own widget structures or library files, or pulling in unrelated data from the main requested Controller to push through to the View and render in a partial. None of these are particularly good options, because the responsibility of rendering a particular piece of content or loading required data ends up leaking into multiple areas and getting duplicated in the places it is used.

HMVC, or specifically the ability to dispatch sub-requests to a Controller to handle these responsibilities aims to solve this problem. The structure mimics that of traditional MVC. You need to load some data about comments, and display them in HTML format. So you send a request to the comments Controller with some parameters, it interacts with the Model, picks a View, and the View displays the content. The difference from a traditional MVC is that instead of displaying the comments in a fully separated page, you display them inline, below the blog article the user is viewing. (Although an HMVC approach allows you to serve both internal and external requests with the same controller.) In this regard, HMVC strives to increase code modularity, aid re-usability, and maintain a better separation of concerns.

See also[edit]


  1. ^ Jason Cai, Ranjit Kapila, and Gaurav Pal (July 2000). "HMVC: The layered pattern for developing strong client tiers". JavaWorld. Retrieved 2006-05-25. 
  2. ^ "TP" (2000). "Is HMVC PAC? (letter to the editor)". JavaWorld. Archived from the original on 2005-02-05. Retrieved 2006-05-25. 
  3. ^ Vance Lucas (April 2011). "What is the HMVC pattern?". StackOverflow. Retrieved 2013-10-15.