Ruby on Rails 脂肪モデル、スキニーコントローラ


「脂肪モデル、スキニーコントローラ」は、MVCのMとC部分が理想的に一緒に働く方法を指します。つまり、レスポンスに関係のないロジックは、理想的にはテスト可能な方法でモデルに入るべきです。一方、「スキニー」コントローラは、ビューとモデルの間の単なる素晴らしいインタフェースです。

実際には、これにはさまざまなタイプのリファクタリングが必要ですが、すべてが1つのアイデアになります。コントローラーではなく、モデルの応答ではないロジックを移動することで、再利用を促進するだけでなく可能であれば、要求のコンテキスト外でコードをテストすることも可能にしました。

簡単な例を見てみましょう。次のようなコードがあるとします。

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

次のように変更することができます:

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

次に、ロジックをポストモデルに移動すると、次のようになります。

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