En este artículo te explicaré qué son los concerns, cómo usarlos y para qué sirven de forma rápida, fácil y sencilla. ✨💻 ¡Asi que prepárate y a aprender! 🚀📚
¿Qué son?
Los concerns en Rails son módulos diseñados para compartir lógica entre modelos y controladores dentro de la aplicación. De esta manera organizamos el código de tal manera de eliminar duplicidad y abstraer lógica. Los concerns los puedes encontrar dentro de:
- Modelos:
app/models/concerns - Controladores:
app/controllers/concerns
¿Para qué se usan los concerns?
En pocas palabras es:
- Abstraer lógica - DRY (Don’t Repeat Yourself): Extraer lógica común compartida entre diferentes modelos o controladores
- Organización: Separar lógica adicional para mantener los modelos y controladores más limpios y con responsabilidades definidas.
- Reusabilidad: Reutilizar funcionalidades específicas en múltiples lugares.
Veamoslo de manera práctica con un corto ejemplo:
Tenemos dos clases Post y Comment, ambas tienen un estado de publish o archived y queremos tener un scope para consultar según el estado. Es decir que tendriamos el siguiente código en ambos modelos.
scope :archived, -> { where(archived: true) }
scope :active, -> { where(archived: false) }
La mejor manera de eliminar la duplicidad en este caso es abstraer esta lógica dentro de un concern, es decir:
# app/models/concerns/archivable.rb
module Archivable
extend ActiveSupport::Concern
included do
scope :archived, -> { where(archived: true) }
scope :publish, -> { where(archived: false) }
end
end
y llamamos el concern dentro de cada modelo:
# app/models/post.rb
class Post < ApplicationRecord
include Archivable
end
# app/models/comment.rb
class Comment < ApplicationRecord
include Archivable
end
De esta manera tanto en Comment como en Post tengo el método archived y publish, es decir:
Comment.archived || Comment.publish
Post.archived || Post.publish
El método included se utiliza para ejecutar bloques de código cuando el módulo es incluido en una clase. Es decir que incluye la logica dentro de la clase en la que se llama. Esto es como si las definiciones se hubiesen escrito directamente allí.
Buenas prácticas
- Evitar lógica excesiva: No uses concerns para añadir mucha lógica. Ya que la idea detras de ellos es tener una única responsabilidad. Tiene relación con los principios
SOLID. - Nombrar de forma descriptiva: Usa nombres que expliquen claramente la funcionalidad del concern.
- Cohesión: Asegúrate de que el concern tenga un propósito claro y esté relacionado con una funcionalidad específica.
- Mantén los concerns simples: No incluyas lógica muy dependiente del estado del modelo/controlador. Esto puede crear dependencias difíciles de mantener.
Los concerns son útiles para mantener el código limpio, modular y fácil de mantener. Sin embargo, deben ser usados con moderación y solo cuando una funcionalidad sea realmente compartida entre varias partes de la aplicación.
¡si has llegado hasta aquí, ya eres un crack entendiendo los concerns en Ruby on Rails variables! 💪🚀
Si te gusto, no olvides seguirme en mis redes y compartir. 👨💻🎧