我有一個記錄/模型,充滿了很多布爾標誌,短字符串,混雜設置等,我想重構它們到一個封裝類。Ruby on Rails OOP - 我知道嵌套/內部類,嵌套'記錄'怎麼樣?
我通常會爲父母創建一個「自己」的內部類,但是Rails中的最佳實踐是什麼?
- 只留下一切記錄? composed_of?雖然不是很乾淨。
- 序列化?變得不容易搜索+開銷+可擴展性問題。仍然不乾淨。
- 創建另一條記錄,關聯它和delegate?但必須委派和管理任務,別名(布爾?字段),創建/保存回調,我不知道更多的東西...
- 有沒有一種方法來創建'內部記錄'?
- 另一種方式?
一個例子是有一個表Client
,行數低10〜20。每個Client
都有很長的選項列表,目前存儲在Client
列。因此,有領域,如:
c = Client.find(1)
c.theme_color # "blue"
c.session_timeout_seconds # 1800
c.branding_logo # "client_a.png"
c.require_logout_confirmation # true
在純面向對象系統沒有護欄,我會重構這些「實例變量」到嵌套Client::Options
類。然後,所有選項都將組織在一個嵌套類中,並封裝在Client
內。這樣,沒有其他人需要知道Client::Options
和Client
是密切相關的(它們仍然只是消息c.theme_color
而不知道Client
會將呼叫委託給內部的Client::Options
),並且這也將成爲鬆散耦合的重構,因爲沒有其他類或方法調用需要改變。
但是,嵌套類的東西是不可能的(據我所知)在軌道中,所以我正在尋找'最佳實踐'的解決方案。
好像它會產生過於剛愎自用的答案。但我不知道。 – sevenseacat
那麼那麼這意味着沒有'最佳實踐',我只需要做一些自定義解決方案。 – Kache
爲什麼你想重構成封裝類?因爲它是有意義的(它們屬於一個整體,它應該是另一個實體),分享它,更容易地擴展它?也許一個更具體的例子來演示可能會有幫助。 – nathanvda