¿Qué es MVC?

Domingo 27 de Julio de 2008

Este es un patrón que me hace enojar, porque no termino de entenderlo.

Entre artículo y artículo aprendí varias cosas sobre este patrón:

  1. El modelo sabe como cambiarse solo (como cualquier objeto debería), e implementa el patron Observador.
  2. La vista sabe leer el modelo.
  3. El controlador conoce la vista y el modelo.
  4. El controlador NO está en el medio de la vista y el modelo.
  5. Un modelo puede tener cualquier cantidad de vistas y controladores…

Y varias otras cosas, que no me terminan de cerrar, por ejemplo:

¿Quién es la “Ventana”? Si es la Vista, ¿Para qué necesita el Controlador conocerla? Sólo necesita registrar los eventos. Si es el Controlador, ¿Por qué la vista tiene esa asociación indirecta al controlador?

Algunos conceptos “primarios” de la OO, como “Tell, don’t ask”. (El modelo debería mandarle a la vista lo que necesite, no ser leído por ella. Los métodos accesores son malos y todo eso…)

En fin, ¿Alguien entiende de verdad este patrón?

[Imagen sacada de Wikipedia.]

Por favor, dejá un comentario, o un trackback desde tu sitio. Podés seguir la conversación con el Feed de comentarios de este post.

2 Comentarios a “¿Qué es MVC?”

  1. Gonzalo dijo:

    Lunes 28 de Julio de 2008, 05:28

    Por acá está masomenos bien explicado (en inglés).
    El ejemplo que usa es medio “raro”, pero tiene lógica.

  2. Gorlok dijo:

    Lunes 28 de Julio de 2008, 09:23

    En realidad es relativamente simple el MVC, pero es uno de los patrones de diseño conceptuales más usados, y por ende, con distintas interpretaciones. Hay implementaciones que son más o menos puristas, que por ej. dejan o no que la vista conozca al modelo, así que depende mucho de a qué y cómo se aplique.
    Sin embargo, el modelo conceptual, es siempre el mismo, y ayuda a separar los conceptos.

Comentá:

Entrá con tu cuenta, registrate, o escribí tus datos:

XHTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">