22

¿Podría alguien explicarme el MVC en Ruby on Rails, en términos sencillos? Estoy especialmente interesado en comprender el Modelo en MVC (no entiendo bien el modelo).¿Qué es MVC en Ruby on Rails?

+0

Ver http://stackoverflow.com/questions/1242908/in-english-what-really- is-model-view-controller –

+0

El enlace @BillKarwin ya no existe – geoff

Respuesta

43

Algunos antecedentes, MVC es un patrón de diseño (compuesto) y fue desarrollado en 1979 por Trygve Reenskaug (Smalltalk).

Verdadero MVC fue previstas principalmente para su uso en sistemas de N-Capas (no web) y se divide un sistema en 3 partes distintas, un modelo, Vista y Controlador

El Modelo

  • contiene datos para la aplicación (a menudo vinculada a una base de datos)
  • Contiene el estado de la aplicación (por ejemplo,lo ordena un cliente tiene)
  • contiene toda la lógica de negocio
  • notifica a la vista de los cambios de estado (** no es cierto de ROR, véase más adelante)
  • No se requieren conocimientos de interfaces de usuario, para que pueda ser reutilizado

The View

  • genera el interfaz de usuario que presenta datos al usuario
  • pasiva, es decir, no hacer ningún procesamiento
  • El trabajo de vistas se realiza una vez que se muestran los datos al usuario.
  • Muchos puntos de vista pueden acceder al mismo modelo por diferentes razones

El controlador

  • recibir eventos del mundo exterior (generalmente a través de visitas)
  • interactuar con el modelo
  • Muestra el vista apropiada para el usuario

** Classic MVC no es adecuado para aplicaciones web, ya que el modelo no puede enviar todos los cambios a la vista de forma observadora (la vista es una página web). El Model2 fue presentado para superar la infraestructura cambiante del equipo JSP en los años 90. Los frameworks MVC Web realmente no son MVC, sino Model2 (esto es cierto para Ruby on Rails).

Aquí es una descripción de los patrones de interfaz gráfica de usuario, incluyendo MVC del maestro, Martin Fowler GUI Architectures

El mejor libro que he encontrado hasta ahora es Agile Web Development with Rails. Comienza asumiendo que no tiene conocimiento, y es bastante completo.

Espero que esto ayude a arrojar algo de luz para usted!

+0

Siempre es bueno leer acerca de MVC de su creador, y luego reconocer que realmente no se aplica a las aplicaciones web. Puede leer más en http://heim.ifi.uio.no/~trygver/2007/MVC_Originals.pdf – Theraot

+0

Esta es una buena respuesta general, pero no está relacionada específicamente con Ruby on Rails. Consulte este enlace para obtener una mejor respuesta: http://www.tutorialspoint.com/ruby-on-rails/rails-framework.htm –

+0

Ruby on Rails no tiene una separación real entre la "Vista" y el "Controlador". Las vistas se ejecutan en el contexto de un controlador y efectivamente igual que un código de controlador (excepto con una sintaxis diferente). Esta es la razón por la cual '@ var' siempre funciona, y es marcadamente diferente de muchos otros marcos, donde las Vistas se ejecutan completamente separadas de los Controladores. – Carpetsmoker

3

Su modelo es la estructura de datos que utiliza su programa.

La vista es la parte que interactúa con la pantalla o sube de nivel.

El controlador generalmente procesa los datos entre el modelo y la vista

estructuras MVC a menudo se anidan, por lo que un "modelo" o "Vista" puede contener su propio MVC (Piense en un componente en la pantalla. Es posible que sólo rellene con una cadena, pero detrás de las escenas el código del componente dibuja su propia pequeña vista, tiene su propio pequeño modelo (la secuencia que pasa) y tiene un pequeño controlador que dibuja los datos en la vista.

In Rieles, los roles del modelo, vista y controlador están bien definidos por el marco, cualquier tutorial señalará los tres componentes mientras lo guía a través de los archivos que creó.

En otros sistemas, esas piezas pueden ser más difíciles de identificar. Además, MVC no es "perfecto", solo tenga en cuenta que existen alternativas válidas, pero es una buena manera de empezar a organizar.

1

MVC no es específicamente solo para Ruby on Rails. En realidad fue creado un tiempo antes de que Ruby on Rails llegara. Principalmente es solo una forma de organizar su código para que tenga algún código que sea responsable de sus modelos (la versión Class de una tabla de base de datos), algún código que sea responsable de sus vistas (lo que se muestra visualmente al usuario) y código responsable para sus controladores (lo que vincula las vistas con los modelos y realiza la mayor parte de su lógica.

Esa es la descripción no específica del marco. Cada marco que utiliza MVC tiene una forma diferente de implementarlo. Para Ruby on Rails cada model representa una tabla de base de datos como una clase que puede comunicarse directamente en código con otros objetos sin necesidad de escribir ningún SQL. Todo el SQL está siendo atendido en segundo plano y solo tiene que pensarlo como si fuera una clase normal (bueno, casi no es perfecto aún). La vista es principalmente HTML y representa lo que se enviará al navegador. er es solo el código que comunica los modelos y las vistas juntos.

Con todo, MVC no es específico solo para Ruby on Rails ... es el más popular.

0

Ruby on Rails no implementa el patrón de diseño MVC. Ruby on Rails tiene carpetas llamadas controladores, modelos y vistas. La carpeta de vistas tiene archivos HTML. La carpeta de controladores y modelos tiene archivos ruby. Los controladores asignan una URL y un método en el controlador se ejecuta al solicitar esa URL, la vista asociada (archivo HTML) se carga y el modelo (estructura de datos) se utiliza para poblar la vista. Esa es la medida de su semejanza con el patrón de diseño de MVC. Es una pena que la gente diga que es MVC porque ha causado una generación de confusión e incomprensión del patrón de diseño de MVC.

En Rails, el modelo es una estructura de datos.

2

enter image description here

MVC indica básicamente Modelo-Vista-Controlador. Y MVC utilizado por muchos lenguajes como PHP, Perl, Python, etc. Generalmente MVC funciona así:

La solicitud primero viene al controlador, el controlador encuentra y visualiza adecuadamente e interactúa con el modelo, el modelo interactúa con su base de datos y envía la respuesta para el controlador, entonces el controlador basado en la respuesta da el parámetro de salida para ver.

+0

Una cosa que me molesta acerca de estas tablas es que realmente no hace justicia al explicar cómo se pasa el modelo entre la vista y el controlador. Hace parecer que el modelo es una entidad separada, pero en realidad es el paquete de datos pasado entre la vista y el controlador. El controlador * técnicamente * controla lo que ocurre en el modelo en el servidor; en este caso, cargar datos de la base de datos. El gráfico hace que parezca que el modelo está a cargo de esto (tiene lógica para hacerlo), cuando realmente el controlador hace esta llamada. –

0

He aquí una breve descripción a alto nivel sobre cómo funciona el patrón MVC:

controlador:

  1. escucha en algún tipo de flujo de interacción/evento.
  2. El controlador puede enviar al modelo ese tipo de interacción/evento.
  3. El controlador también se puede comunicar con la vista.

Modelo:

  1. Modelos escucharán en la interacción/evento desde el controlador.
  2. Es una abstracción de una fuente de datos.
  3. Maneja la lógica de datos y la manipulación.
  4. Después de que se hace con lógica, luego se envía al controlador que luego se comunicará con la vista.

Vista:

  1. View puede comunicarse con el controlador.
  2. Sabe cómo renderizar visualmente los datos del Modelo al navegador.
  3. El controlador le dice a View que haga algo con algo del modelo .

Un par de cosas a tener en cuenta es que los modelos no se pueden comunicar con vistas directamente y viceversa. Solo el controlador puede comunicarse con la vista y el modelo, por lo que el controlador actúa como el delegador para la interacción/evento recuperado de la interacción de los usuarios en el navegador.

check this link for more clear understanding

one more link to get clear

1

El principio Modelo Vista Controlador divide el trabajo de una aplicación en 3 subsistemas independientes pero estrechamente cooperativos.

Model (ActiveRecord):

Se mantiene la relación entre los objetos y la base de datos y maneja la validación, asociación, transacciones, y más.

Este subsistema se implementa en la biblioteca ActiveRecord, que proporciona una interfaz y enlace entre las tablas en una base de datos relacional y el código del programa Ruby que manipula los registros de la base de datos. Los nombres de los métodos Ruby se generan automáticamente a partir de los nombres de campo de las tablas de la base de datos.

Ver (ActionView):

Es una presentación de los datos en un formato particular, provocada por la decisión de un controlador para presentar los datos. Son sistemas de plantillas basados ​​en scripts como JSP, ASP, PHP, y muy fáciles de integrar con la tecnología AJAX.

Este subsistema se implementa en la biblioteca ActionView, que es un sistema basado en Ruby incrustado (ERB) para definir plantillas de presentación para la presentación de datos. Cada conexión web a una aplicación Rails resulta en la visualización de una vista.

Controlador (ActionController):

La instalación dentro de la aplicación que dirige el tráfico, por una parte, la consulta de los modelos de datos específicos, y por otro lado, la organización de los datos (búsqueda, selección, enviándolo) en una forma que se ajuste a las necesidades de una vista determinada.

Este subsistema se implementa en ActionController, que es un intermediario de datos ubicado entre ActiveRecord (la interfaz de la base de datos) y ActionView (el motor de presentación).

Verificar los siguientes enlaces para comprensión clara de MVC en rieles:

http://www.bogotobogo.com/RubyOnRails/RubyOnRails_Model_View_Controller_MVC.php

https://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/

+0

Gracias por votar mi respuesta – vinoth