服務層和 ASP.NET MVC 2 的用途
為了理解 MVC 2 並試圖讓我的公司採用它作為未來發展的可行平台,我最近做了很多閱讀。在過去的幾年裡,我完全專注於 ASP.NET,我有一些事情要做。
目前,我了解儲存庫模式、模型、控制器、數據註釋等。但有一件事讓我無法完全理解,無法開始研究參考應用程序。
第一個是服務層模式。我在 Stack Overflow 上閱讀了很多部落格文章和問題,但我仍然不完全理解這種模式的目的。我在 MVCCentral 上觀看了 Golf Tracker 應用程序的整個影片系列,還查看了他發布的展示程式碼,在我看來,服務層只是儲存庫模式的另一個包裝器,根本不執行任何工作。
我還閱讀了這篇文章:http ://www.asp.net/Learn/mvc/tutorial-38-cs.aspx它似乎在某種程度上回答了我的問題,但是,如果您使用數據註釋來執行驗證,這似乎沒有必要。
我一直在尋找展示、文章等,但我似乎找不到任何可以簡單解釋該模式並為我提供使用它的令人信服的證據的東西。
有人可以給我一個二年級(好吧,也許是五年級)使用這種模式的理由,如果我不這樣做我會失去什麼,如果我這樣做我會得到什麼?
在 MVC 模式中,您的職責分為 3 個參與者:模型、視圖和控制器。
Model 負責做業務,View 呈現業務的結果(也提供來自使用者的業務輸入),而 Controller 就像是 Model 和 View 之間的粘合劑,將每個內部的工作與另一個。
該模型通常由數據庫備份,因此您有一些 DAO 訪問它。您的企業做了一些……好吧……業務並在數據庫中/從數據庫中儲存或檢索數據。
但是誰來協調 DAO?控制器?不!模型應該。
進入服務層。服務層將為控制器提供高級服務,並將在幕後管理其他(較低級別)參與者(DAO、其他服務等)。它包含您的應用程序的業務邏輯。
如果你不使用它會發生什麼?
您必須將業務邏輯放在某個地方,而受害者通常是控制器。
如果控制器以 Web 為中心,它將必須接收其輸入並以 HTTP 請求、響應的形式提供響應。但是,如果我想從與 RPC 或其他東西通信的 Windows 應用程序呼叫我的應用程序(並訪問它提供的業務)怎麼辦?然後怎樣呢?
好吧,您將不得不重寫控制器並使邏輯客戶端不可知。但是使用服務層,您已經擁有了它。你不需要重寫東西。
服務層提供與 DTO 的通信,這些 DTO 不依賴於特定的控制器實現。如果控制器(無論哪種類型的控制器)提供了適當的數據(無論來源),您的服務層將盡其所能為呼叫者提供服務並將呼叫者隱藏在所涉及的業務邏輯的所有責任中。