Desarrollo

Ruby on Rails y el patrón MVC

· 5 min de lectura

Una forma divertida de representar el MVC en el mundo real es pensar en cómo funciona una ORGANIZACIÓN MUSICAL. Te explico...

¿Qué es MVC?

MVC significa Model-View-Controller. Es un patrón de diseño que separa una aplicación en tres componentes lógicos:

  • Model: la capa de datos. Maneja la lógica de negocio y las interacciones con la base de datos.
  • View: la capa de presentación. Muestra los datos al usuario.
  • Controller: el cerebro. Procesa las peticiones, habla con el Model y elige la View.

La analogía de la organización musical

Imagina una orquesta de concierto:

El Model (los músicos)

Los músicos son los expertos. Saben tocar sus instrumentos, leer partituras y producir sonidos hermosos. No les importa el público ni el recinto: se concentran en su oficio.

En Rails, tus Models son lo mismo. Saben:

  • Validar datos
  • Consultar la base de datos
  • Definir relaciones
  • Ejecutar lógica de negocio
class Song < ApplicationRecord
  belongs_to :artist
  has_many :performances

  validates :title, presence: true
  validates :duration, numericality: { greater_than: 0 }

  def formatted_duration
    "#{duration / 60}:#{(duration % 60).to_s.rjust(2, '0')}"
  end
end

La View (el escenario y las luces)

El escenario, las luces y el sonido presentan la música al público. No crean la música: la hacen visible y audible de la mejor forma.

En Rails, las Views son tus templates ERB. Toman datos y los presentan bien:

<div class="song">
  <h2><%= @song.title %></h2>
  <p>By <%= @song.artist.name %></p>
  <span class="duration"><%= @song.formatted_duration %></span>
</div>

El Controller (el director)

El director no toca ningún instrumento. En cambio:

  • Recibe el programa (el request)
  • Les dice a los músicos qué tocar (llama al Model)
  • Señala cuándo empezar y parar (coordina el flujo)
  • Asegura que el público vea la función correcta (elige la View)
class SongsController < ApplicationController
  def show
    @song = Song.find(params[:id])
  end

  def create
    @song = Song.new(song_params)
    if @song.save
      redirect_to @song, notice: 'Song created!'
    else
      render :new
    end
  end

  private

  def song_params
    params.require(:song).permit(:title, :duration, :artist_id)
  end
end

El flujo

  1. Llega el request — Alguien quiere oír una canción (visita /songs/1)
  2. El Controller recibe — El director toma el pedido
  3. Se llama al Model — «¡Músicos, toquen la canción #1!»
  4. Se obtienen los datos — Los músicos saben exactamente cómo tocarla
  5. La View renderiza — Se encienden las luces, suenan las bocinas
  6. Se envía la respuesta — El público disfruta la función

Por qué importa

Entender MVC te ayuda a:

  • Organizar el código — Cada componente tiene una responsabilidad clara
  • Cambiar con menos dolor — Puedes cambiar la View sin tocar el Model
  • Probar mejor — Cada pieza se prueba por separado
  • Escalar la app — Agregas features sin romper lo que ya funciona

La convención de Rails

Rails facilita el MVC con convenciones:

app/
├── controllers/    # The conductors
│   └── songs_controller.rb
├── models/         # The musicians
│   └── song.rb
└── views/          # The stage
    └── songs/
        ├── index.html.erb
        └── show.html.erb

Cuando corres rails generate scaffold Song title:string duration:integer, Rails crea los tres componentes y sigue el patrón MVC solo.

Conclusión

La próxima vez que armes una app Rails, piénsate organizando un concierto:

  • Tus Models son los músicos que dominan su oficio
  • Tus Views son el escenario que presenta la función
  • Tus Controllers son los directores que orquestan todo

Mantén cada componente en su rol y tendrás una aplicación clara, mantenible y que suena como una orquesta bien ensayada.

Happy coding! 🎵