單一 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
|