What is the meaning of “Fat models, Skinny controllers” and “Skinny controllers, Skinny models”?
“Fat models, Skinny controllers” 和 “Skinny controllers, Skinny models”是什麼意思?
一開始新手剛開始寫rails的習慣會將許多商業邏輯直接寫到controller裡面,但這樣會造成controller變得很龐大,而Model則只有少少的程式碼,而形成Fat controllers, skinny models的情況。
而更好的方式是,商業邏輯應該寫在Model裡,而不是controller,這讓這些邏輯更容易測試,也易於重複使用。
Controller的角色應該是views與models之前傳遞訊息的角色,太龐大會讓整個程式碼不好理解與維護,可以適時的利用callback來減少重複的程式碼。
當商業邏輯都移到model後就會形成Fat models, skinny controllers的狀況。
Fat models, Skinny controllers是很好的第一步,但當程式越來越多,龐大的Model就會漸漸難管理,而且有些商業邏輯找不到適合的model來存放,根據所謂SRP(single responsibility priciple)的原則,也就是Model主要的目的應該是藉由它來連結與資料庫的資料做連結。我們可以利用其他的設計模式(像是Service Object)漸漸將某些邏輯移出Model,幫助Model瘦身,就成了Skinny controllers, Skinny model。
至於Service Object是什麼,就留給明天來介紹吧!
剛學Ruby時,總是會被告誡要將商業邏輯寫在Model而不是Controller,這樣讓這些商業邏輯容易測試且較好重複使用,而Controller則是維持view與model之前資料交換的角色就好,就會有Fat models Skinny controllers的情況。
但隨著程式漸漸長大,龐大的Model會變得難以管理,我們可以利用像Service Object的設計模式來將某些邏輯移出Model,也維持Model的簡潔,而形成Skinny controllers, Skinny model。
1.Rails: skinny controller, skinny model
2.53 Ruby on Rails Interview Questions and Answers