我對於每個邏輯功能組一般都有一個控制器。通常這將與每個型號的一個控制器相對應,有時不會。
想象一下,您正在創建一個簡單的在線目錄,顯示一個類別列表,然後當用戶選擇一個類別時,顯示該類別的產品列表,以及用於CRUD
操作類別和產品的管理面板。我有兩個型號(CategoryModel
和ProductModel
)。我會有一個控制器爲前端生成類別列表,另一個控制器生成產品列表(例如CategoryController
和ProductController
)。然後,我會在後端有一個控制器,用於類別和產品(AdminCategoryController
和AdminProductController
)。兩個後端控制器將處理各自型號的列表/添加/編輯/刪除/查看操作。如果您認爲您的網址結構並將相關功能放在相關的網址上,那麼您的控制器結構通常會與您的網址結構相匹配。實際上,一些框架(例如CodeIgniter)根據控制器的名稱路由請求作爲默認行爲。至於在控制器中發生了什麼,我工作的觀點是模型用於數據訪問,幷包裝和隱藏數據庫結構。諸如「當狀態設置爲」完成「時將當前時間分配給completion_date的邏輯」是非常適合的模型。
視圖包含整個演示文稿。控制器/模型不應該生成或處理HTML。諸如2列或3的決定屬於觀點。視圖中的邏輯應限制爲生成可見輸出所需的邏輯。如果您發現自己想從視圖中查詢數據庫,那麼您可能會將太多邏輯放入視圖中。
控制器是爲了剩下的。通常這意味着驗證輸入,將表單數據分配給模型,選擇正確的視圖並實例化處理請求所需的模型。
謝謝....這幾乎是我在做什麼。 我想要做的一件事是把更多的邏輯放入模型層。我使用推動模型對象,並認爲驗證應該進入模型層。控制器只是在模型中設置數據... – AndreLiem 2009-02-24 19:09:36