MVC vs HMVC - Userlinux.net

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…

MVC vs HMVC

21.Oct.2010 ~ 5 Comentarios ~ 2624 Lecturas

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:

MVC

HMVC

¿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.

Comentarios


gravatar
21.Oct.2010
¡Buen post!
Claro y conciso :)
Y lo mejor, no te metes en las menudencias sobre lo que debe -o no debe- hacer el modelo (que eso es una fuente de discusiones continuas entre desarrolladores).
No obstante, y en mi experiencia, la elección de HMVC ó MVC, va a depender, como bien dices, de gustos.. A nivel de rendimiento, escalabilidad, etc, debería de ser exactamente igual..
Como ya sabes, mi gran "amor", symfony, se basa en módulos, y cada módulo tiene su "controlador" (no es exactamente así, pero bueno, a efectos prácticos podríamos plantearlo así).
Y lo mejor es que ahora con Symfony2, te puedes montar la estructura _que_tu_quieras_ ;)
No obstante, si soy sincero, tengo ganas de hacer algo con Code Ignitier.. Allá por el 2012, creo que podré tener tiempo, jejejeje
(O paso a no dormir...)
Abrazotes :)

gravatar
21.Oct.2010
Pues que quieres que te diga, yo lo de tener un fichero por cada "controller", "model" o "view", sigo sin verlo. Al final solo sirve para tener el codigo desglosado en miles de ficheros que te lian a la hora de organizar la estructura de trabajo.

Para mi es mucho mas claro el modelo MVT (model-view-template) de django, donde tu tienes un proyecto, ese proyecto se compone de aplicaciones y cada aplicacion tiene un models (donde van los modelos) un views (donde van las vistas) y un directorio templates (donde van las plantillas).

Todo esto, imho siempre, claro ;D

gravatar
21.Oct.2010
@joserprieto: Por lo que dices el concepto de Módulo de Symfony es el mismo que aplico yo en la modificación de CodeIgniter y es a lo que @Wu llama Aplicación. De todas formas me parece muy interesante poder montar tu propia estructura.

@Wu: Por lo poco que he probado Django, su sistema MVT también es jerárquico porque agrupa los archivos en aplicaciones. Bien es cierto que puedes montar el esquema más o menos como tú quieras pero MVT == HMVC (aunque con distinta nomenclatura).

gravatar
21.Oct.2010
En symfony 1.x existe el concepto de plugin, que no es más que un miniproyecto que extiende la funcionalidad del proyecto, que al final puede ser un conjunto de miniproyectos (plugins). Cada plugin tiene su schema, controlador y plantillas (y más). Como symfony trabaja con ORM, a la hora de generar las clases base del modelo éstas se guardan en un directorio global del proyecto. Lo bueno es que puedes extender desde la aplicación tanto el schema como los controladores de los plugins y sobreescribir plantillas, muy práctico.

En Symfony2 el concepto de Bundle dará mucha flexibilidad a la estructura del proyecto.

gravatar
24.Nov.2010
Hola, a mi parecer el esquema HMVC es muy flexible a la hora de escalar una aplicación, y eso depende mucho del framework que se use, particularmente uso kohana 3.x y Django, kohana 3.x tiene soporte HMVC al igual que Django y me dieón muy buenos resultados.

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • graffic
  • reidrac
  • reidrac
  • Wu
  • dilam
  • r0sk
  • reidrac
  • r0sk
  • chucu
  • r0sk
  • el_palomo_programador
  • r0sk
  • reidrac
  • Player 1
  • r0sk

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

bsd humor bake twitter vacaciones ps3 hack 2007 python blog django alemania_2006 mundial cake felicidades games conciertos rsidenotes juegos openbsd web iphone sidenotes rfilms ubuntu barça cakephp blogsfera mac bash meme macosx deportes canción ds personal films freebsd 2008 opinion nintendo sysadmin futbol mysql php frases userlinux debian ssh linux blogs champions apple lugo league programación twitt lucux seguridad cumpleaños

Archivo

Social

Enlaces de interés