Ruby on Rails Fat Model, Skinny Controller


Esempio

"Fat Model, Skinny Controller" si riferisce a come le parti M e C di MVC lavorano idealmente insieme. Vale a dire, qualsiasi logica non correlata alla risposta dovrebbe essere inserita nel modello, idealmente in un buon metodo testabile. Nel frattempo, il controller "magro" è semplicemente una bella interfaccia tra la vista e il modello.

In pratica, questo può richiedere una gamma di diversi tipi di refactoring, ma tutto si riduce a un'idea: spostando qualsiasi logica che non riguarda la risposta al modello (invece del controller), non solo hai promosso il riutilizzo dove possibile ma hai anche reso possibile testare il tuo codice al di fuori del contesto di una richiesta.

Diamo un'occhiata ad un semplice esempio. Di 'che hai un codice come questo:

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

Puoi cambiarlo con questo:

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

Quindi, puoi spostare la logica sul tuo modello di post, dove potrebbe apparire come questa:

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