2

我有一個關於MVC應用程序結構的問題。假設我們必須實現一個由幾個模塊組成的基於網絡的應用程序,例如購物車,商店瀏覽器(最終用戶),店鋪經理(管理員)等等。在MVC中,你如何構造#Controllers關於視圖,模型和路由?

當然,也可以創建一個控制器,並使用路由的請求提交到一個特定的控制器的操作方法。然而,這會使代碼非常混亂,妨礙垂直構建應用程序的實踐,即識別和區分哪些視圖,模型和控制器涉及滿足特定要求(例如Phil Haack)。

另一種方法是使用一個控制器爲每個應用程序部分,例如一個可供最終用戶操作的控制器,另一個用於網店管理員,另外一個由船等部門的查詢。這種方法的缺點是有太多的控制器搞亂了你的代碼,太專用於特定的任務,所以難以重用。

根據該兩種極端的情況下,什麼是組織你的控制器和路由策略的最佳方法是什麼?你使用結構化的方法,還是取決於你正在開發的應用程序的類型?

感謝

弗朗西斯

回答

2

當然可以創建一個控制器並使用路由將請求提交給特定控制器的操作方法。 [...]

另一種方法是使用一個控制器爲每個應用程序部分,[...]

你俯瞰第三種選擇,這是最常見的一種。一般來說,你應該有每資源一個控制器。 A 資源是一個公開曝光的模型。在您的具體店面應用程序,資源會之類的東西ProductsOrdersCustomers

這通常是抽象的適當水平,因爲控制器通常並不需要了解比他們接觸到的資源等車型。觸及多個資源的控制器應與一些懷疑觀看,因爲它違反了single-responsibility principle

+0

感謝您的回答。我通過資源瞭解組織下的概念,非常整齊,直觀。然而,如何處理考慮的資源在ER關係方面是代表關聯關係的表格(或類別)?例如,假設我擁有將客戶與產品相關聯的訂單資源,並且希望向未註冊的最終用戶提供創建訂單的機會,並通過將他/她的數據添加到客戶資源來註冊用戶。 – CiccioMiami 2011-04-11 12:15:42

+0

您是否將訂單資源視爲與他自己的控制器或組在客戶控制器下訂購特定操作方法的獨特資源? – CiccioMiami 2011-04-11 12:16:00

+0

如果你可以用'Order'單獨做事情(比如「給我一個特定的訂單」),我肯定會把'Order'作爲自己的資源。如果您可以在不參考其他實體的情況下做到這一點,情況尤其如此。 (另外,你的例子有些誤導性,因爲這不是一種真正的關聯關係。一個訂單可以很好地站在自己的位置,而無需引用產品或客戶。) – 2011-04-11 12:42:35

1

你應該儘量遵循REST儘可能

基本上 - 這意味着控制器對於每個 '收集'(你的實體)。

如果你的控制器將RESTful的,其他部分(路由,觀看次數)將相應地適應自己。