Ruby on Rails Fat Model, Skinny Controller


Exempel

"Fat Model, Skinny Controller" hänvisar till hur M- och C-delarna i MVC idealiskt fungerar tillsammans. Nämligen, alla icke-svar-relaterade logik bör gå i modellen, helst i en trevlig, testbar metod. Samtidigt är den "magra" styrenheten helt enkelt ett trevligt gränssnitt mellan vyn och modellen.

I praktiken kan detta kräva en rad olika typer av refactoring, men allt kommer till en idé: genom att flytta någon logik som inte handlar om svaret på modellen (istället för styrenheten), inte bara har du främjat återanvändning där det är möjligt men du har också gjort det möjligt att testa din kod utanför sammanhanget för en begäran.

Låt oss titta på ett enkelt exempel. Säg att du har kod så här:

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

Du kan ändra det till detta:

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

Sedan kan du flytta logiken till din inläggsmodell, där den kan se ut så här:

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