以javaweb和asp.net爲例 解析三層架構與MVC模式

以javaweb和asp.net爲例 解析三層架構與MVC模式

1. 什麼是系統架構
所謂系統架構是指,整合應用系統程序大的結構。經常提到的系統結構有兩種:三層架構與 MVC。這兩種結構既有區別,又有聯繫。但這兩種結構的使用,均是爲了降低系統模塊間的耦合度。

2. 什麼是三層架構
三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分爲:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即爲了“高內聚低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層。

三層架構的另一種命名方式(本質是一樣):視圖層 View、服務層 Service,與持久層 DAO。

分層命名 英文簡稱 作用
視圖/界面/表示層 UIL / View 主要功能是顯示數據和接受傳輸用戶的數據。簡單來說就是:用於接收用戶提交請求的代碼。
服務/業務邏輯層 BLL / Service 將用戶的輸入信息進行甄別處理,分別保存。建立新的數據存儲方式,在存儲過程中對數據進行讀取。簡單來說就是:實現系統的業務邏輯的代碼。
持久/數據訪問層 DAL / DAO 數據訪問層在作業過程中訪問數據系統中的文件,實現對數據庫中數據的讀取保存操作。簡單來說就是:直接操作數據庫的代碼。

爲了更好的降低各層間的耦合度,在三層架構程序設計中,採用面向抽象編程。即上層對下層的調用,是通過接口實現的。而下層對上層的真正服務提供者,是下層接口的實現類。服務標準(接口)是相同的,服務提供者(實現類)可以更換。這就實現了層間解耦合。

3. 什麼是MVC模式
MVC模式,即 Model 模型、View 視圖,及 Controller 控制器。

微軟官方對MVC的解釋
模型:
MVC 應用程序的模型 (M) 表示應用程序和任何應由其執行的業務邏輯或操作的狀態。 業務邏輯應與保持應用程序狀態的任何實現邏輯一起封裝在模型中。 強類型視圖通常使用 ViewModel 類型,旨在包含要在該視圖上顯示的數據。 控制器從模型創建並填充 ViewModel 實例。
視圖:
視圖 (V) 負責通過用戶界面展示內容。 它們使用 Razor 視圖引擎在 HTML 標記中嵌入 .NET 代碼。 視圖中應該有最小邏輯,並且其中的任何邏輯都必須與展示內容相關。 如果發現需要在視圖文件中執行大量邏輯以顯示覆雜模型中的數據,請考慮使用 View Component、ViewModel 或視圖模板來簡化視圖。
控制器:
控制器 ©是處理用戶交互、使用模型並最終選擇要呈現的視圖的組件。在MVC應用程序中,視圖僅顯示信息;控制器處理並響應用戶輸入和交互。在MVC模式中,控制器是初始入口點,負責選擇要使用的模型類型和要呈現的視圖(它控制應用如何響應給定請求)。

備註:控制器不應由於責任過多而變得過於複雜。 要阻止控制器邏輯變得過於複雜,請將業務邏輯推出控制器並推入域模型。

4. MVC 架構程序的工作流程
用戶通過 View 頁面向服務端提出請求,可以是表單請求、超鏈接請求、AJAX 請求等;服務端 Controller 控制器接收到請求後對請求進行解析,找到相應的 Model 對用戶請求進行處理;Model 處理後,將處理結果再交給 Controller;Controller 在接到處理結果後,根據處理結果找到要作爲向客戶端發回的響應 View 頁面。頁面經渲染(數據填充)後,再發送給客戶端。

5. 三層架構+MVC的項目結構
以JAVA三層架構+MVC的項目爲例
在這裏插入圖片描述
項目文件位於src/main目錄下,程序源碼爲與java目錄下,資源文件位於resources目錄下,前端頁面(jsp)位於webapp目錄下。

三層架構:
在java目錄下含域名翻轉+項目組件包(com.dx.login.demo),該包下含各分層包,數據訪問層(dao)、業務邏輯層(service)、視圖層後臺(web),webapp(與java目錄同級)目錄爲視圖層的前端,在該目錄下包含前端頁面文件。Java目錄和webapp目錄下分別是java代碼和html代碼,分類如此。

MVC模式:
在webapp目錄下含jsp頁面即爲(view),在視圖層的後臺(web)包下含控制器(controller)和模型(model),三者構成MVC。注意:MVC三者均位於視圖層
注:此處的model或與可以叫做viewmodel。
其餘如commons通用類包、filter過濾器包等爲附加包,不影響系統架構。

以ASP.NET三層架構+MVC項目爲例
在這裏插入圖片描述
VisualStudio的項目結構爲解決方案下含項目的結構,解決方案爲整個大項目,下含的各個項目爲大項目的分層,對應java項目中的package包,由於Asp.net MVC不再基於文件目錄結構,而是將URL映射到控制器中,因此不再需要域名翻轉等外層package包。

三層架構:
該解決方案下的BLL包爲業務邏輯層,DAL包爲數據訪問層,實體類/Model(對應java項目中的entity)與業務邏輯和數據訪問並列,以上分層均採用類庫(.dll)格式輸出。

MVC模式:
該解決方案下的dmtodo包爲網站包,對應三層架構中的視圖層(UIL),在該包下含M(模型或者叫視圖模型)、V(視圖)、C(控制器)三個程序目錄,以及其他附加目錄。

參考資料:
https://funtl.com/zh/mvc/#%E6%9C%AC%E8%8A%82%E8%A7%86%E9%A2%91
https://baike.baidu.com/item/%E4%B8%89%E5%B1%82%E6%9E%B6%E6%9E%84/11031448?fr=aladdin
https://blog.csdn.net/LyySwx/article/details/78936825

發佈了13 篇原創文章 · 獲贊 2 · 訪問量 2017
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章