沒有用過YII,但是MVC基本上都是那個路子。action應該是控制器吧,一般來說控制器最好是做請求的分發和輸出,最好不要在action中做任何處理??梢赃@么理解,一個項目就是一個餐廳,action是服務員,他的工作就是接收客人的要求,然后傳達給廚師,廚師做好菜,服務員再端回來給客人,就這么多。但是這里面會涉及問題,比如說客人點的是燉菜,服務員應該去告訴做燉菜的廚師A,客人要甜點,服務員應該去通知糕點師B。要是餐廳的菜品一多,服務員就不得不記住很多對應關系,也就是說傳達請求的邏輯很復雜。要是服務員生病請假了,臨時找個人來替代是很難的,因為這個活很復雜,這就對應我們對代碼里修改或者加功能一樣。要是我們的action寫得很復雜,改代碼是非常痛苦的,甚至很可能為了加一點新的小功能導致整個程序編譯失敗。所以現在的大餐廳,服務員基本上都是用一個機器給生成訂單,然后由機器來通知各個廚師。這樣的好處就是,服務員的工作就變得很簡單了,要找個新的服務員也非常容易。這個行為對應在MVC的架構里面也是非常常用的,叫做委托。就是說,action收到請求,只需要做一個簡單的處理,然后委托給一個專門的model來進行更進一步的請求分發和過濾,由這個model再去調真正的處理程序。這個被委托來做分發的model是屬于M層的。我們的許多設計模式也是使用在M層,比如做分發的model實現一個工廠模式或者策略模式等等,這些都是在M層的處理,action是C層的,盡量讓action保持簡潔。類比來說,盡量讓服務員少管業務,更多的精力放在給顧客的服務上,action更注重的就是做好用戶的接口。