¿Por qué desacoplar la vista y el controlador (web)?


8

¿Por qué no podemos ponerlos en la misma página, como cada acción combinada con su vista? ¿No usa la isla de código, pero el código del controlador en la parte superior y luego ve el código en la parte inferior? ¿Cuáles son los problemas con este enfoque?

Por MVC, me refiero a frameworks como ASP.NET MVC y Ruby on Rails, y tengo la impresión de que V y C son en realidad la capa de interfaz de usuario.

Respuestas:


5

La razón por la que generalmente están desacoplados es porque desea que su vista use un controlador para llegar a su modelo. Pero la arquitectura debería permitirle reemplazar una vista con otra sin tener que cambiar la lógica de negocios (es decir, el modelo de objeto o cómo se recuperan esos objetos).

Al no vincular su controlador directamente a la vista, más adelante sería mucho más fácil agregar otra funcionalidad como importar / exportar que puede usar el controlador / modelo directamente sin tener que depender de ninguna interfaz de usuario.

Otra ventaja de sacar la mayor cantidad de código posible de la interfaz de usuario es porque las interfaces de usuario son mucho más difíciles de probar en la unidad que la capa empresarial detrás de ellas. Al separar todo lo que pueda de la vista, puede escribir muchas más pruebas unitarias para asegurarse de que su controlador / modelo y la lógica de la aplicación sean correctos.


Para importar / exportar, no necesita una vista, por lo que no hay nada que desacoplar. Para las pruebas, aún puede ejecutar la prueba lógica en la acción / vista, el único problema que veo es cargar el código de vista que no necesita probar, pero puede moverse fácilmente.
Andy

Para importar / exportar, no necesita ver nada, así que a menos que su controlador esté desacoplado de su vista, ¿por qué querría ejecutar el código de vista cuando la importación / exportación podría no estar basada en la web? Además, incluso con páginas web, podría tener más de una vista en el mismo modelo (es decir, página asp diferente, clase diferente), si no desacopla su controlador, duplicará ese código en vistas diferentes.
DXM

Si no hay vista, no hay vista, independientemente de si está desacoplada o no.
Andy

Pensé que tu pregunta era "por qué desacoplar el controlador de la vista". Si la importación / exportación necesita acceder al controlador para acceder al modelo de objetos, ¿cómo puede hacerlo sin instanciar su vista? Sin desacoplar, independientemente de si alguien está o no procesando HTML, está creando una instancia del código de vista. ¿O sugiere duplicar el código del controlador dentro de la funcionalidad de importación / exportación?
DXM

1
Su publicación original: "¿Por qué no podemos ponerlos en la misma página?", Entonces tiene una página asp.net que representa HTML y presenta los datos de su modelo. En esta página, acopló su VC en una clase. Ahora tiene el requisito de que su aplicación debe admitir importación / exportación (no de esta página, solo en general). Si una lógica de importación / exportación completamente separada necesita acceso al controlador, ¿de dónde lo obtiene? ¿O planea colocar toda su aplicación en la misma clase de página? ¿Qué sucede si desea ejecutar la exportación sin conexión (es decir, localmente en el cuadro del servidor fuera del servidor web)?
DXM

4
  • El controlador maneja la lógica de negocios que puede cambiar de vez en cuando, y la Vista puede permanecer sin cambios, según los requisitos.

  • Lo contrario de lo anterior también es cierto.

  • Los diseñadores y desarrolladores deben poder trabajar en el mismo proyecto de forma independiente.

Una buena publicación: http://mashable.com/2011/11/12/designer-collaboration-strategies/

  • Todo el sistema se vuelve más fácil de mantener. Resolver errores se vuelve más fácil con el enfoque desacoplado.

  • Los estándares web con tecnologías front-end están cambiando a un ritmo acelerado. Imagine una corporación que decide migrar todas las tecnologías de front-end a HTML5, Dart, etc. ¡Tener una vista y un controlador acoplados sería una pesadilla!


Primero y para la mayoría, la lógica de negocios debe estar en el modelo. En segundo lugar, la vista está llena de código, como foreach y ayudantes, un diseñador gráfico ciertamente no querría lidiar con eso. Si quiere lidiar con eso, entonces él es en realidad un programador de interfaz de usuario, y el controlador es parte de su preocupación. En cuanto a HTML5, la mayor parte del HTML se construye a partir de un mecanismo de diseño, ayudantes HTML y vistas parciales (que son como ayudantes) de todos modos, por lo que realmente no importa si la vista está acoplada, no está modificando la vista en sí para HTML5 .
Andy

@Andy Youy pidió una distinción entre C y V ... Desde esa perspectiva, C maneja la lógica de negocios, como maneja los modelos.
Yannis

3

No tienes que separar los dos, por supuesto. Pero si la vista y el controlador son independientes, se puede utilizar cualquier interfaz de usuario. Por ejemplo, puede usar el controlador a través de la consola, los sockets, la web o la interfaz de escritorio. En otras palabras, puede aumentar la reutilización del código.


Me refería al desarrollo web, donde la interfaz de usuario es en realidad la vista y el controlador combinados, por lo que realmente no puede intercambiar solo la vista con una nueva interfaz de usuario.
Andy

3
@Andy: seguro que podrías, puedes decidir que quieres tener una aplicación nativa de iOS y una aplicación de Android para el sitio web que estás desarrollando. En lugar de tener que volver a hacer las cosas, simplemente puede hacer llamadas a sus controladores y luego tener una vista separada en el dispositivo iOS / Android, reutilizando así el controlador.
Jetti

@Jetti, ese es un buen punto.
Andy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.