vista ventajas net mvc modelo framework ejemplos desventajas controlador asp java php .net model-view-controller smalltalk

java - ventajas - ¿Qué hace que un marco sea un "verdadero" marco MVC?



mvc pdf (8)

A veces la gente necesita dar un paso atrás y mirar los "marcos" de la vida real de los cuales el mundo digital obtuvo el término. Eso podría ayudar a explicar su significado a pesar de las infinitas opciones en línea que distorsionan la palabra para adaptarla a las agendas personales y menospreciar a otros sistemas.

Un marco debería ayudarlo en cada área de su trabajo.

Entonces, si solo tiene una sola página de cartera, entonces solo necesita un pequeño conjunto de herramientas. Si comienzas el próximo Facebook, tu "marco" será enormemente diferente.

Al leer debates en línea sobre frameworks MVC, escuché muchos comentarios apuntando hacia proyectos PHP como Cake, Code Igniter y Symfony de desarrolladores Java / .NET en la línea de "esos son hacks ingeniosos, pero no verdaderos MVC".

Entonces, ¿qué hace que algo sea un "verdadero" marco MVC? es decir, ¿qué es un ejemplo de un framework .NET o Java MVC que hace las cosas de manera diferente que Cake, Code Igniter, Symfony, etc., y qué son esas cosas diferentes? ¿Es solo la falta de orientación de objetos forzados de PHP que requiere un arranque, o es algo más?

Sé por qué PHP el lenguaje "apesta", estoy más interesado en las diferencias en la implementación y / o uso de MVC.


Aquí hay algunas preguntas que pueden ayudarlo a ver si su marco es bueno y verdadero.

"¿Puedo ejecutar pruebas unitarias para mis clases de MVC sin marco?"

Y esto se aplica incluso si no escribe prueba unitaria.

Debería poder escribir código relacionado con MVC independientemente del marco. Cuando la aplicación recibe alguna entrada del marco, debe ser como objetos con interfaces conocidas , sin clases concretas.

La cosa es que el verdadero marco MVC no tendría (o tendría un impacto muy limitado) en la arquitectura misma. En el mejor de los casos, solo proporcionaría una manera clara y fácil para que la llamada a la aplicación llegue a sus triadas de MVC. Y tal vez proporcione conveniencias para usted ... no limitaciones y limitaciones.

"¿Funciona con magia y polvo de hadas?"

Debería poder ampliar cualquier clase, que fue proporcionada por el marco. Y debería ser fácil entender qué función debe implementar.

Esto se vuelve muy difícil de hacer si "algo acaba de suceder" . Esto generalmente apunta al estado global en el código del marco. Ya sea en forma de métodos estáticos o variables globales / estáticas.

"¿En qué punto entra mi código?"

¿Puedes encontrar dónde y cómo se ejecuta tu controlador? Por lo general, no será tan fácil. Ese punto místico generalmente es profundo en objeto-gráfico. Algunas veces incluso en una clase extendida.

Tal situación hace que sea muy difícil cambiar el entorno en el que se ejecutó el controlador. También impone reglas estrictas sobre cómo deberían ser sus métodos de control.

Todo esto trae de vuelta al punto, que en el verdadero marco MVC debe mejorar el proceso de desarrollo en lugar de restringir sus opciones.

"¿Se suponía que él / ella podría hacer esto?"

Autenticación: una autorización puede parecer un aspecto separado del desarrollo, pero en realidad, en el contexto de MVC, tiene una tendencia a ser algo complicado.

Muchos frameworks tienen alguna infraestructura de autenticación / autorización. Esta es una tarea repetitiva, y todos lo hemos hecho hasta la muerte, por lo tanto, es un buen candidato para la función, qué marco puede proporcionar.

Pero aquí está el truco: la mayoría de ellos intenta poner la autorización dentro de sus controladores y son muy exigentes con respecto a cómo se puede ajustar. Esta es otra restricción.

A lo que se reduce esto es a esto. Para cualquier marco, no debe requerir volver a escribir cada controlador solo para agregar funcionalidad de inicio de sesión . Incluso si ignoras la violación de OCP, esto solo agrega otro riesgo para que accidentalmente olvides algo.

.. Mis dos centavos



JavaServer Faces es un buen marco de pila completo para MVC. Tiene buenos componentes de visualización, buenos controladores con los beans administrados, y para el modelo puede crear clases de negocios.


La idea de MVC es desacoplar la arquitectura de la aplicación en tres niveles independientes, y permitir que cada uno de estos niveles use una implementación diferente sin afectar los otros niveles. En su mayoría, la distinción es entre lógica de negocios (el Modelo) y presentación (la Vista).

Muchos frameworks de PHP intentan usar la filosofía Ruby on Rails de "software obstinado", por lo que el correcto funcionamiento del Modelo y la Vista juntos requieren que ambos se ajusten a una implementación determinada. Es decir, las clases deben nombrarse de cierta manera, los archivos del proyecto deben organizarse según una determinada estructura de directorios, la notación en los scripts de visualización debe seguir una convención, etc.

Esto hace que sea difícil sustituir las diferentes implementaciones de cada nivel de forma independiente, y esto va en contra del objetivo de MVC de desacoplar los niveles entre sí.


Puede encontrar útil this página wiki.


Un marco, como su nombre lo indica, está destinado a soportar estructuras, en este caso su aplicación. La cosa común (y triste) sobre la mayoría de los marcos que verías flotando es que se convierten en estructuras imponentes, dictando su propia forma de separar la lógica de negocios, la presentación, el enrutamiento / control. Vería el código de la aplicación que parece que necesita un equipo completo solo para mantener algo que escribió hace un año. Parece que el objetivo es la riqueza de las características en el marco. No, no es. Se trata de dar libertad al programador para que decida por sí mismo qué componentes de una aplicación deben separarse y dónde debe hacerse la separación, siempre que la tarea se pueda distribuir entre un grupo de trabajo de personas con su propia experiencia.

Independientemente de si la separación debe ser entre el modelo, la vista y el control, que por cierto tienen que comunicarse de algún modo entre sí en algún lugar, el arquitecto de soluciones debe decidir la falta de nitidez o la distinción.


Un verdadero marco MVC no tiene una capa M (odel). CakePHP y sus amigos tienen algunas clases inteligentes para acceder a la base de datos, a la que llaman Modelo, dejando la mayor parte del procesamiento de datos al Controlador.

Eso está mal. El Modelo debe hacer todo el procesamiento de datos (y puede usar clases de bases de datos de ayuda para eso) y el Controlador debe ser la puerta de enlace entre el usuario / página web y el modelo. La mayoría de las veces, el modelo es un objeto PHP simple que no se adhiere a ninguna regla, por lo que el marco no puede especificar esas reglas.