MVC vs HMVC
A mi modo de ver los esquemas organizativos MVC -junto con muchos otros factores- han cambiado a mejor la organización y estructuración del código fuente de un proyecto. Separar en capas las distintas partes de un trabajo (datos, lógica y vista) se antoja un proceso crítico, laborioso pero divertido a la vez.
Por otro lado a veces nos encontramos con situaciones en las que el MVC se convierte en un híbrido entre lo que es y lo que debería haber sido, en este punto hay una clara diferencia entre los desarrolladores que optan por la rama práctica y los que bajo ningún concepto intentan mezclar capas.
¿Qué hace el Modelo?
El modelo es la capa que conecta la aplicación con los datos de la misma. Normalmente los datos suelen estar almacenados en algún sistema gestor de bases de datos, en disco o en cualquier tipo de caché. Lo más común es consultar (agregar, editar, eliminar...) esos datos y devolver la respuesta de esa consulta al controlador para seguir el flujo del programa.
¿Qué hace la Vista?
La vista es la capa encargada de mostrar al usuario un interfaz con el que interactuar con los datos almacenados. Es lo que podemos llamar la parte visible de la aplicación, con la que el usuario ejecuta las acciones disponibles. En muchos casos es sinónimo de "frontend".
¿Qué hace el Controlador?
El controlador es la capa crucial de la aplicación, donde se aplica la lógica de la misma. Desde el controlador nos encargamos de preguntarle al Modelo por los datos que vamos a manufacturar, los recogemos y los preparamos para poder llamar a la vista y que ésta se encargue de representarlos.
¿Qué diferencia hay entre MVC y HMVC?
Según la Wikipedia HMVC significa Hierarchical-Model-View-Controller, es decir, un esquema MVC jerárquico. Tan solo se diferencia con MVC en la forma en que agrupamos el código, creo que se ve mejor con un ejemplo:
¿Cuándo usar uno u otro?
No creo que haya ninguna regla de oro para escoger, dependerá de si el framework (o la herramienta de desarrollo que se vaya a utilizar) soporta este tipo de organización, del tipo de proyecto, de la mentalidad del desarrollador, gustos personales, etc... De todas formas y como norma general podemos decir que un esquema HMVC podría ser más útil en aplicaciones modulares de tamaño mayor mientras que MVC se ajustaría mejor en aplicaciones más pequeñas o no necesariamente modulares (ojo, no tiene que ser así especialmente).
Opinión personal
Desde que he descubierto HMVC (en mi caso con alguna modificación de CodeIgniter) es muy raro que empiece algún proyecto php sin esta característica. Cierto es que para cosas pequeñas puede ser algo más complejo de organizar pero una vez le has cogido el punto es como un vicio que no puedes dejar.