控制器是否需要直接調用存儲庫,還是應該始終運行服務層?或者還有其他選擇嗎?ASP.NET MVC - 資源庫/服務/控制器
回答
如果你有一個服務層,並使用your're它抽象業務邏輯從倉庫離開的方式(如你應該用一個服務層)則沒有,你的控制器只應做的服務電話方法。服務層將成爲與回購協議的耦合。
除了Mayo的回答:模型是將在整個應用程序(回購,服務和UI /控制器)中傳遞的數據類,以便UI/Web層像其他層一樣「操作」它們。
我認爲如果你實現的Fowler's definition上下文和modern aspnet mvcadaptions一個服務層,那麼你應該有你的控制器動作設計非常小巧輕便的方法,要求從服務層的「肉」的業務邏輯。
編輯:我想我並不清楚:具有服務層是唯一的選擇,我不是說,只是想回答有關在那裏你做的情況下使用的問題的一部分一個服務層。同意,服務層並不總是必要的,特別是對於小型項目。
所有的我一直用的例子似乎表明,該控制器應在模型上進行操作。
這麼說,我聽說過,一些作者認爲,該模型是由一切從業務邏輯數據存儲庫(而不是,許多人認爲是模範的業務對象類)。
就個人而言,我會盡量保持它的清潔/通過使控制器上保持一致,對倉庫操作類工作 - 但我不認爲這是反對它的硬/快治。
控制器解釋用戶輸入並通過查看準備車型使用,因爲我已經體會到了它。有些人真的很認真地去掉模型中的每一點邏輯,但我並不是那種肛門。
恕我直言,最好的選擇是使用DI從控制器內訪問您的存儲庫。
我假設你是meen? 「來自控制器的每一點邏輯」, – LiamB
嗯,不,模型中的每一點邏輯。模型不做任何事情,但存儲CONTROLLER爲響應用戶輸入/請求而收集的數據。 – Will
這將是一個'貧血模型',大多數人不認爲是非常好的做法:http://en.wikipedia.org/wiki/Anemic_Domain_Model – UpTheCreek
服務層基本上是您的業務邏輯/業務模型的api。例如,您可能有一些方法可以獲得您的「最佳客戶」。服務層然後做它需要做的事情來查詢存儲庫,執行它需要做的任何邏輯等,然後返回客戶。在這種情況下,您應該始終通過服務層。
雖然有時你只是檢索對象,可能是在你的視圖模型,而不是在商業模式。當然,你可以在服務層的存儲庫中添加一個包裝器,但是你可能冒着混淆你的服務層和填充無意義的東西的風險。在這種情況下,我認爲直接訪問存儲庫沒有什麼壞處。
您並不總是需要服務層 - 在簡單的情況下,它只是過度設計解決方案。控制器調用存儲庫很好。但是,如果你看到你的控制器充滿了邏輯,或者你正在重複自己的控制器動作,那麼請考慮在控制器和存儲庫之間放置一個服務,並將一些邏輯從控制器轉移到服務層。
我同意@Sosh關於過度的工程問題。但是我發現控制器經過一項服務可以帶來很大的好處,當通過SOAP/REST通過線路重用該服務時,您的重構工作非常少。請記住,這違反了YAGNI,並且正在考慮未來(在某種程度上)。
但是再次 - 在閱讀Jeffrey Palermo的最新書籍 - MVC In Action後,他有一個直接與存儲庫進行零邏輯對話的控制器,它工作得很好。
是的,關於Web服務的好處。 – UpTheCreek
- 1. ASP.NET MVC - 服務層<->控制器
- 2. asp.net mvc和控制器服務架構
- 3. MVC控制器WCF服務
- 4. ASP.NET MVC 4 - 服務器資源管理器中的本地數據庫
- 5. ASP.Net控制器接收404「缺少資源」錯誤MVC
- 6. mvc 3 asp.net從控制器訪問資源
- 7. asp.net mvc的資源無法找到控制器
- 8. 當您不控制服務器時跨源資源共享?
- 9. ASP.Net MVC控制器
- 10. ASP.NET MVC3路由REST服務控制器
- 11. 解析服務器資源限制
- 12. ASP.NET MVC 5控制器JsonResult內部服務器錯誤
- 13. 服務器控制服務器控制
- 14. ASP.NET服務器控件 - 數據源
- 15. Mvc 4代理服務器/控制器
- 16. 測試使用$資源響應執行服務的控制器
- 17. 測試控制器,取決於基於資源的服務
- 18. 響應數據從$資源服務到控制器
- 19. Laravel 5資源控制器
- 20. 覆蓋資源控制器
- 21. 注入ASP.NET MVC控制器屬性到服務層依賴?
- 22. 實際作用控制在ASP.NET MVC/SQL服務器
- 23. asp.net mvc控制器方法 - > soap web服務
- 24. 爲什麼asp.net MVC控制器不被視爲RESTful Web服務
- 25. 使用ServiceStack服務與ASP.NET MVC控制器的優點/缺點?
- 26. 爲ASP.NET MVC控制器爲AngularJs服務創建自動「代理」
- 27. DotNetOpenauth:作爲資源服務器的MVC網站
- 28. spring mvc通用控制器和服務
- 29. 服務注入到控制器(Spring MVC)
- 30. Spring MVC 3.1服務靜態資源
+1服務層鏈接 – Mayo