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?
Well - Sam de Freyssinet (aka samsoir), one the of Kohana developers, recently published an article dealing with this question.
http://techportal.ibuildings.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)
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:
- 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.
- 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:
- Consistency - HMVC requests are treated the same as external http requests.
- Power - HMVC requests have the same Kohana resources as http requests including routes.
- 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.