2014-06-29 60 views
0
  1. 有沒有一個通用的經驗法則來控制器應該如何組織?MVC控制器應該如何組織?

  2. 控制器是否應該只在鏈接到域模型時才被創建?

舉例來說,如果我有一個「產品」的模式,我想有一個ProductController的,這將有諸如「GetProductDetails」等等......

但是,我們的行動沒有實際模型的東西,例如搜索產品,並在頁面上返回多個產品?

由於產品模型是所有這些交互的底層模型,應該這個功能被納入ProductController的,並有用於搜索和顯示多個產品的行爲,或者另一個搜索產生的呢?

回答

0

你應該管理好每其中涉及與相同的控制器相同資源的動作,你應該實現在符合該解決方案與Richardson Maturity Model

模型(由倫納德·理查森開發),打破了 主要內容將REST方法分爲三個步驟。這些 引入資源,http動詞和超媒體控件。

所以你的API將是這樣的:

/API /產品GET獲取所有類別

/API /產品/ 123GET獲取的完整列表單個類別的詳細信息

/api/productsPUT替換類別與 整個列表的一個給定的

/API /產品/ 123PUT更新所指定的類別

/API /產品POST創建一個新的類別

/api/productsDELETE刪除所有類別

/API /產品/ 123DELETE刪除指定類別

1

如果你遵循在Visual Studio中使用的則是你最終與每個實體一個控制器腳手架使用的模式因此產品控制器會執行返回列表,單個產品和發佈更新的操作。此外,您可能還有其他搜索操作和其他與產品相關的操作。這只是狀態,並加強推斷的答案。

然而,你這樣做的原因是,這意味着你的代碼更容易維護 - 如果你正在尋找代碼來處理產品,你有一個控制器類來看。你也遵守關注點分離原則每個控制者只關心一種類型的實體。

此外,如果您的應用程序變得更大,並且您使用IoC /依賴項注入模式,那麼您只需要爲每個控制器注入一個存儲庫或業務服務,該控制器是一種搜索控制器,提供搜索產品和客戶的方法需要客戶和產品的服務或存儲庫,但是請求可能只是客戶搜索,因此創建產品庫是毫無意義的,因此您得到的代碼效率低下且過於複雜。有一些模式可以解決這個問題,但它們涉及更多的代碼,以避免這種情況,並保持它簡單地堅持一個根實體一個控制器。