Desarrollo
Ruby on Rails y el patrón MVC
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
- Llega el request — Alguien quiere oír una canción (visita
/songs/1) - El Controller recibe — El director toma el pedido
- Se llama al Model — «¡Músicos, toquen la canción #1!»
- Se obtienen los datos — Los músicos saben exactamente cómo tocarla
- La View renderiza — Se encienden las luces, suenan las bocinas
- 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! 🎵