這一篇的重點是 Object-Oriented View。
14. Decorate using Decorator ( don’t put everything in model )
在前面我們介紹了幾個手法,包括 將 Logic 收納到 Helper 裡面
:
以及 將 Helper 裡面的 Logic 重新整理到 Model
:
但是,再怎麼整理,Model 還是會肥起來:
最後你只好把這些 Logic 又抽出成 Module:
等等...這樣好像有很大的問題?XDDDDD 這些程式碼其實大部分都是 View 裡面的 Logic,怎麼到最後都變成 Model 裡面的東西。
Drapper ( Decorators/View-Models for Rails Applications )
我們可以用 Decorators/View-Models 解決這樣的問題。因為這本來就是屬於「View 層次」的東西。
有一個還不錯的 Gem 叫 Draper 可以進行這樣的抽象整理。
其實開發者最希望 View 裡面只要有一行
這樣就好了。
我們可以透過 Draper 的 DSL,做到這樣的封裝。
然後在 Controller 裡面呼叫 decorate
就可以了
15. Decoration using View Object
另外一種作法是把 View 裡面複雜的邏輯抽成 View Object
這是一個 event 頁面。在這個頁面裡面,如果當前 User 是 event host,則顯示 "You",否則顯示 Host name。且參加者裡面也要剔除當前 User。
寫成 Helper 實在是有點囉唆。我們不如改用 View Object 進行整理。
則 View 就可以很漂亮的被收納成以下:
Maintainable Rails View 系列文目錄