Creo est Credo
MVC y Model2
A mediados de los 70 el patrón MVC (Modelo-Vista-Controlador, o en inglés Model-View-Controller) fue desarrollado principalmente en la comunidad de programadores Smalltalk para reducir el acoplamiento entre la lógica del negocio y la lógica de la presentación. Con MVC es posible poner la lógica del negocio en un objeto de dominio separado y aislar la lógica de presentación en una "vista", que se usa para presentar datos de los objetos del dominio. El controlador administra la navegación entre las vistas, procesa los datos ingresados por el usuario, y reúne y organiza los objetos de dominio adecuados entre el modelo y la vista. Muchos programadores han usado MVC desde ese entonces, implementando aplicaciones MVC en diferentes lenguajes, incluyendo Ruby.
Los desarrolladores web utilizan una variante ligeramente diferente de MVC llamada Model2, que básicamente adopta los mismos principios que el patrón MVC original, adaptándolo a aplicaciones web que se caracterizan por no guardar un estado de la aplicación entre pedido y pedido. En las aplicaciones MVC web los usuarios llaman a un controlador a través de los estándares web. El controlador entonces interactúa con los modelos para obtener los datos y validar la entrada generada por el usuario, entonces hace disponibles los objetos de dominio para mostrarlos en la vista, invocando al generador de vista correcto, basado en la validación de la entrada generada por el usuario y los datos obtenidos del modelo. La capa de vista genera una página web, usando los datos provistos por el controlador, y entonces la aplicación responde con es página web generada por la vista como respuesta al pedido.
Hay muchos proyectos exitosos de este patrón MVC en su variante Model2. Por ejemplo en Java se utiliza Struts, en Python Zope, y en PHP Zend Framework.
¿Qué ocurre cuando creamos una aplicación Rails? Al ejecutar el comando rails nombre_de_la_aplicación, rails se encarga de construir un esqueleto de base que servirá para que la aplicación funcione.
Esta es la salida de dicho comando en una ventana de comandos estándar:
~/rails_apps/$ rails myapp
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create public/.htaccess
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/boot.rb
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/console
create script/destroy
create script/generate
create script/performance/benchmarker
create script/performance/profiler
create script/performance/request
create script/process/reaper
create script/process/spawner
create script/process/inspector
create script/runner
create script/server
create script/plugin
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/422.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
Los directorios y archivos creados durante la instalación de la aplicación web nos proveerán una estructura donde ubicar el código de la aplicación, scripts para administrar y generar la aplicación, y muchas otras cosas interesantes. Este es un breve resumen de lo que encontramos en este esqueleto de base:
- app
-
Este directorio sirve para organizar los componente de la aplicación Tiene subdirectorios para contener la vista, los controladores y los modelos.
-
components
-
Este directorio contiene componentes. Son pequeñas aplicaciones que agrupan juntos modelos, vistas y controladores
-
config
-
Este directorio guarda la pequeña cantidad de archivos de configuración que se necesitarán, incluyendo la configuración de la base de datos, la estructura de entorno de Rails, y las rutas para los pedidos web entrantes. También se pueden personalizar los tres entornos: testeo, desarrollo y producción, con los archivos ubicados en el directorio enviroments.
-
db
-
Usualmente los modelos tendrán acceso a tablas dentro de una base de datos relacional. Desde este directorio se ejecutan scripts para administrar esas tablas.
-
doc
- Ruby posee un framework llamado RubyDoc, que puede generar automáticamente la documentación de nuestra aplicación a partir de cierto tipo de comentarios ubicados en el código. Este directorio guarda dicha documentación.
- lib
-
Aquí se ubican las librerías externas, a no ser que pertenezcan a alguien más (por ejemplo librerías de terceros)
-
log
- El log de Rails se ubica acá. Rails genera logs separados para cada entorno (test, development y production), y uno más para el servidor.
- public
- Este es el directorio público de la aplicación y contiene archivos que no son dinámicos. Javascript, imágenes, hojas de estilo y html.
- script
- este directorio contiene scripts para correr y manejar diferentes herramientas que se usan durante el desarrollo con Rails. Por ejemplo hay scripts para generar código, y para correr un webserver.
- test
- Los tests escritos durante el desarrollo y los que Rails automáticamente generan se ubican aquí.
- tmp
-
Rails usa este directorio para guardar archivos temporales.
-
vendor
-
Librerías externas provistas por terceros van aquí.
Más allá de algunos cambios menores entre versiones de Rails, cada proyecto de Rails tendrá exactamente esta misma estructura, lo cual supone una enorme ventaja, al poder trabajar en diferentes proyectos, sin tener que re aprender la organización de cada proyecto. El framework mismo depende de esta consistencia, porque muchos archivos serán buscados basados en convenciones de nomenclatura.
