Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What Can I Use the HMVC Architecture for?

the PHP framework I am using (Kohana) recently implemented the HMVC architecture. I have read that it's a layered mvc where requests are made on top of each other. It is a bit like ajax, just purely server-side. I have applied it a bit on some experiments but I can't apply it to any of my projects (because I can't find a need for it). Have you ever used HMVC in a project before? How did it help you?

like image 330
yretuta Avatar asked Feb 22 '10 03:02

yretuta


People also ask

What is HMVC architecture?

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 in JavaWorld Magazine, the authors apparently unaware of PAC, which was published 13 years earlier.

What is modular HMVC why should I use it explain?

Modular HMVC = Hierarchy of multiple MVC triads. Firstly, This is most useful when you need to load a view and its data within a view. Think about adding a shopping cart to a page. The shopping cart needs its own controller which may call a model to get cart data. Then the controller needs to load the data into a view.

What is difference between MVC and HMVC?

While MVC has only one controller per request, HMVC can have more than one controller, combining with many triads. Allowing the reuse of existing code, it makes the testing of disparate parts of the systems easier while ensuring the enhancement of the application.

What is modular HMVC?

Modular HMVC means modular MVC triads. Modular Separation and Modular Extensions allows related controllers, models, libraries, views, etc. to be grouped together in module directories and used like a mini application. But, Modular Extensions goes one step further and allows those modules to “talk” to each other.


2 Answers

It is a bit like ajax, just purely server-side.

That's a good analogy.

HMVC is nice for adding widgets to pages - modular bits of content that you'll reuse on few pages. For example, a shopping cart widget. You could do the same thing in different ways:

  1. A library. We're accustomed to moving reusable code from a controller into a library. Then, from the controller, you could load the results of a call to that library into a view variable.
  2. A view. You could load a view (partial) from within the main view. That view partial could pull in content from models. Calling models from views isn't always popular but it isn't necessarily wrong.

However, Kohana HMVC has a few advantages:

  1. Consistency - HMVC requests are treated the same as external http requests.
  2. Power - HMVC requests have the same Kohana resources as http requests including routes.
  3. Pluggability - When called from a view, an HMVC request doesn't have a coupling between the controller (which assigns the library results to a view) and a view placeholder. You only touch one file as opposed to two.

I'm starting to appreciate the case for HMVC and scalability with http requests as linked by Kiall. The same thing could be done with CURL. However, it might be more natural to design with Kohana HMVC than CURL from the start.

like image 169
rick Avatar answered Oct 04 '22 02:10

rick


Well - Sam de Freyssinet (aka samsoir), one the of Kohana developers, recently published an article dealing with this question.

http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

While its not the only use for HMVC - It is one of its more popular uses. The article is mainly concerned with scalability (as in, number of requests per second) but code scalability (as in, how easy/hard is the code to maintain) can be "solved" with the same ideas..

Hope this helps :)

(Side note - his code samples are based on Sam's personal changes to Kohana - see the note at the end of the article)

like image 20
Kiall Avatar answered Oct 04 '22 02:10

Kiall