Essentail Rails Design Pattern

Write Good Rails Code

單一 Method 超過 15 行請注意

場景

#TODO

Refactor

refactor to Model

  • 「業務邏輯相關的資料」
  • 「對資料的處理方法」

refactor to Presentor

  • 不是什麼都需要扔 model
  • Model - View - Presenter

MVP

  • UI 高度依賴業務邏輯
  • 業務過於複雜
  • 僅在該 View 使用一次,且不屬於 Model 的基礎 method
  • 不應該放在 Controller / Model,而應該放在 Presenter
  • 業務邏輯抽出來放在 Presenter,可以隨意改動 UI

Presentor

1
2
3
4
5
6
7
8
9
10
11
class Sites::ShowPresenter

  def hottest_topics
    @hottest_topics = @site.topics.hottest.limit(10)
  end

  def recent_topics
    @recent_topics = @site.topics.unhidden.recent(10)
  end

end

Use presentor in controller

1
2
3
4
5
6
7
8
9
def show
   @presenter = Sites::ShowPresenter.new(@site)
   @headline_topic = @presenter.headline_topic
   @categories =  @presenter.categories
   @site_alias = @presenter.site_alias

   add_breadcrumb @site.name, site_path(@site)
   seo_meta_desc_keywords(@site)
 end

Comments