Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Hierarchical model–view–controller

From Wikipedia, the free encyclopedia
Software design pattern
The structure of an application withPAC.

Hierarchical model–view–controller (HMVC) is a softwarearchitectural pattern, a variation ofmodel–view–controller (MVC) similar topresentation–abstraction–control (PAC), that was published in 2000 in an article[1] inJavaWorld Magazine. The authors were apparently unaware of PAC, which was published 13 years earlier.[2]

The controller has some oversight in that it selects first the model and then the view, realizing an approval mechanism by the controller. The model prevents the view from accessing the data source directly.

Example

[edit]

The largest practical benefit of using an HMVC architecture is the "widgetization" of content structures.[3] 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 do not provide a direct answer for these types of content structures, so programmers often 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. The downside is that the responsibility of rendering a particular piece of content or loading required data leaks into multiple areas and gets duplicated in the respective places.

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. For example, if one needs to load some data about comments, and display them in HTML format, one would send a request to the comments Controller with some parameters. The request then interacts with the Model, picks a View, which displays the content. The difference from a traditional MVC is that instead of displaying the comments in a fully separate page, they are displayed inline below the article the user is viewing. In this regard, HMVC strives to increase codemodularity, aid reusability, and maintain a betterseparation of concerns.

The following is a code example demonstrating sub-requests to child controllers (widgets).

packageorg.wikipedia.examples;importjava.util.Arrays;importjava.util.List;recordComment(Stringauthor,Stringtext){}classCommentRepository{publicList<Comment>findByArticleId(intarticleId){// Return some commments found in the article (example)returnArrays.asList(newComment("Alice","Great article!"),newComment("Bob","I learned a lot."));}}classCommentsController{privatefinalCommentRepositoryrepository=newCommentRepository();publicStringhandle(intarticleId){List<Comment>comments=repository.findByArticleId(articleId);returnrenderCommentsHtml(comments);}privateStringrenderCommentsHtml(List<Comment>comments){StringBuildersb=newStringBuilder();sb.append("<div class='comments'>");for(Commentc:comments){sb.append("<p><strong>").append(c.getAuthor()).append(":</strong> ").append(c.getText()).append("</p>");}sb.append("</div>");returnsb.toString();}}publicclassArticleController{privatefinalCommentsControllercommentsController=newCommentsController();publicStringshowArticlePage(intarticleId){// Main article contentStringarticleHtml="<h1>HMVC Demo Article</h1>"+"<p>This is the main article.</p>";StringcommentsWidget=commentsController.handle(articleId);returnarticleHtml+commentsWidget;}publicstaticvoidmain(String[]args){ArticleControllercontroller=newArticleController();Stringhtml=controller.showArticlePage(42);System.out.println(html);}}

See also

[edit]

References

[edit]
  1. ^Cai, Jason; Kapila, Ranjit; Pal, Gaurav (July 21, 2000)."HMVC: The layered pattern for developing strong client tiers".JavaWorld. Retrieved2020-07-18.
  2. ^"TP" (September 8, 2000)."Is HMVC PAC?". Letters to the editor.JavaWorld. Archived fromthe original on 2006-03-19.
  3. ^Vance Lucas (April 2011)."why HMVC pattern?".StackOverflow. Retrieved2013-10-15.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Hierarchical_model–view–controller&oldid=1323836173"
Category:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp