Ruby on Rails Fat Model, Skinny Controller


Exemple

«Fat Model, Skinny Controller» fait référence à la manière dont les parties M et C de MVC fonctionnent parfaitement ensemble. À savoir, toute logique liée à la non-réponse devrait aller dans le modèle, idéalement dans une belle méthode testable. Pendant ce temps, le contrôleur «skinny» est simplement une interface agréable entre la vue et le modèle.

En pratique, cela peut nécessiter différents types de refactorisation, mais tout se résume à une idée: en déplaçant une logique qui ne concerne pas la réponse au modèle (au lieu du contrôleur), non seulement vous avez favorisé la réutilisation. dans la mesure du possible, mais vous avez également permis de tester votre code en dehors du contexte d'une demande.

Regardons un exemple simple. Disons que vous avez un code comme celui-ci:

def index
  @published_posts = Post.where('published_at <= ?', Time.now)
  @unpublished_posts = Post.where('published_at IS NULL OR published_at > ?', Time.now)
end

Vous pouvez le changer en ceci:

def index
  @published_posts = Post.published
  @unpublished_posts = Post.unpublished
end

Ensuite, vous pouvez déplacer la logique vers votre post-modèle, où il pourrait ressembler à ceci:

scope :published, ->(timestamp = Time.now) { where('published_at <= ?', timestamp) }
scope :unpublished, ->(timestamp = Time.now) { where('published_at IS NULL OR published_at > ?', timestamp) }