2010-04-27 12 views
5

Sé que todo pasa por el controlador.MVC: ¿los modelos interactúan con la vista?

pero a menudo leído artículos que dice algo como esto:

  1. usuario interactúa con la vista
  2. controlador solicita al modelo para que cambie su estado
  3. modelo notifica a la vista cuando su Estado ha cambiado

i dont get the 3rd one. ¿Por qué decir que el modelo notifica la vista, cuando en realidad está notificando al controlador y el controlador está notificando la vista?

Respuesta

3

Parece más un sistema de escritorio y no un sistema sin estado como un sitio web.

Pero tal vez se trata de cómo a algunas personas les gusta consultar los modelos desde la vista, p.

<?php foreach($usersTableGateway->getUsers() as $user): ?> 
<?php echo $user ?><br> 
<?php endforeach; ?> 

Soy más fan de obtener toda la información en el controlador (preparación de la matriz de los usuarios en el controlador) y pasarlo a la vista desde el controlador.

+1

+1 de acuerdo con esto. Es mejor hacer algo como esto en el controlador '$ template-> set ('users', $ usersTableGateway-> getUsers());' – alex

1

De hecho, de vez en cuando he visto MVC descrito de esta manera o dibujado de esta manera. No diría que esto es correcto, pero creo que surge de muchas implementaciones que agrupan explícita o implícitamente el controlador y el modelo.

Si la separación conceptual del marco entre el controlador y el modelo no es tan clara como deberían ser, entonces la parte sobre el "modelo notifica a la vista cuando su estado ha cambiado" es realmente un bit de controlador que resulta ser en el modelo.

Al final, MVC es una guía que depende principalmente de una clara separación de preocupaciones. Si el marco que está utilizando describe las cosas de esa manera ... bueno, en realidad no es MVC. Podría funcionar, pero también podría fallar de maneras inesperadas o incluso no detectadas.

2

MVC es un concepto amplio, y existe una gran variedad de posibles implementaciones. Por ejemplo, Page Controller separa la lógica de la vista, al igual que Front Fontroller. Cada framework MVC también tiene diferentes métodos para representar datos de modelo en la vista: Zend usa Two-Step por ejemplo.

Posiblemente podría establecer una relación Observer entre un objeto de vista y "el Modelo" (que en sí mismo es una bestia realmente complicada) pero creo que este aspecto del patrón MVC tiene más que ver con el contexto original del patrón - es decir, el punto de Galen por encima de

1

No infringe los principios de MVC que su vista escuche directamente a su modelo (consulte here). ASAIK, la única regla sólida de MVC es que tienes un modelo gordo y ciego que protege la lógica de datos y de negocios, y no conoce otras partes del sistema. Cómo se delinean las vistas y los controladores, y su relación con el modelo, se define de forma menos rigurosa.

Cuestiones relacionadas