2009-02-24 79 views
7

我有一個問題,真的適用於任何MVC框架,我使用的是Zend Framework MVC。你應該在MVC中命名你的控制器?你應該什麼時候創建一個新的?

什麼時候你應該創建一個新的控制器? Controller層究竟應該定義什麼?

我用MVC創建了幾個應用程序,逐漸變得更加可重用,但我一直在努力控制命名Controller類。大多數情況下,它匹配任何URL請求,所以業務/前端邏輯。但在某些情況下,這似乎完全是任意的。

有沒有人有一些啓發式/指引要遵循?似乎所有關於MVC的炒作,特別是在PHP中,關於實際約定和啓發式的數據很少。因爲創建混亂的MVC應用程序非常容易...

回答

7

我對於每個邏輯功能組一般都有一個控制器。通常這將與每個型號的一個控制器相對應,有時不會。

想象一下,您正在創建一個簡單的在線目錄,顯示一個類別列表,然後當用戶選擇一個類別時,顯示該類別的產品列表,以及用於CRUD操作類別和產品的管理面板。我有兩個型號(CategoryModelProductModel)。我會有一個控制器爲前端生成類別列表,另一個控制器生成產品列表(例如CategoryControllerProductController)。然後,我會在後端有一個控制器,用於類別和產品(AdminCategoryControllerAdminProductController)。兩個後端控制器將處理各自型號的列表/添加/編輯/刪除/查看操作。如果您認爲您的網址結構並將相關功能放在相關的網址上,那麼您的控制器結構通常會與您的網址結構相匹配。實際上,一些框架(例如CodeIgniter)根據控制器的名稱路由請求作爲默認行爲。至於在控制器中發生了什麼,我工作的觀點是模型用於數據訪問,幷包裝和隱藏數據庫結構。諸如「當狀態設置爲」完成「時將當前時間分配給completion_date的邏輯」是非常適合的模型。

視圖包含整個演示文稿。控制器/模型不應該生成或處理HTML。諸如2列或3的決定屬於觀點。視圖中的邏輯應限制爲生成可見輸出所需的邏輯。如果您發現自己想從視圖中查詢數據庫,那麼您可能會將太多邏輯放入視圖中。

控制器是爲了剩下的。通常這意味着驗證輸入,將表單數據分配給模型,選擇正確的視圖並實例化處理請求所需的模型。

+0

謝謝....這幾乎是我在做什麼。 我想要做的一件事是把更多的邏輯放入模型層。我使用推動模型對象,並認爲驗證應該進入模型層。控制器只是在模型中設置數據... – AndreLiem 2009-02-24 19:09:36

0

對於大多數情況,我遵循控制器每模型模式。我有幾個控制器可以爲多個模型提供服務(如管理員控制器可以爲多個管理模型提供服務),但一般規則是每個業務模型都有一個控制器。

相關問題