Ruby On Rails? – Design Patterns
Michel Martens
http://lists.simplelogica.net/pipermail/ror-es/2005-January/000022.html
Mi consejo es que estudien no sólo MVC, sino patrones de programación
en general. Ruby On Rails? es más que puro MVC: Active Record?, por ejemplo, es
la implementación de un pattern del mismo nombre.
La idea del MVC es separar el problema en tres capas: model, view y controller.
El model representa la realidad, y un modelo simple podría ser un
objeto del tipo Person con los atributos name, lastname, gender,
birthday. No tiene importancia si se trata de una tabla en una base de
datos o de un archivo XML, YAML, etcétera. Lo importante es que
refleje la realidad (o el aspecto de la realidad que nos interesa). El
model no es un objeto estático, sino una especie de máquina con
botones que pueden ser manipulados a discreción. Así, nuestro model
Person puede tener métodos como age (retorna la diferencia en años
entre hoy y el atributo birthday), o full_name (retorna la
concatenación de los atributos name y lastname).
El controler conoce al model, sabe qué atributos y qué métodos tiene,
pero no a la inversa: el model no sabe quién lo manipula, simplemente
se deja manipular. El controller sabe, además, qué es lo que el
usuario del sistema intenta hacer. Si el usuario quiere crear una
nueva instancia del tipo Person, el controller creará el objeto
(person = Person.new?) y mostrará un formulario para que los datos
necesarios sean cargados por el usuario. ¿Cómo hace el controller para
mostrar un formulario? Delega el control en una vista determinada...
Una view también conoce el model pero no tiene por qué saber desde
donde lo llamaron. Simplemente se limita a mostrar un aspecto del
modelo, por ejemplo:
Nombre : <%= person.name %>
Apellido: <%= person.lastname %>
Etcétera. No sé si queda claro a partir de esta explicación tan breve.
Me parece que sería más útil, además, despejar antes que nada las
dudas relacionadas con la programación orientada a objetos. Les dejo
algunos links:
Castellano
http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
http://es.wikipedia.org/wiki/Patrones_de_dise%C3%B1o
Inglés
http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
http://c2.com/cgi/wiki?StartingPoints