WikiJuanan: ModeloMVC

Ruby On RailsDesign 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.

Model

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).

Controller

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...

View

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