C#框架結構分層:三層結構,DDD,MVC,MVVM,MVP

本文主題,講解主要有哪些分層思想。

一、三層結構

作爲早期程序開發的經典,這是一個完全由程序員自己控制的分層思想。
在我們自己所有的項目中,幾乎是無處不在,無時無刻不在使用。

它的主要思想是分界面層(UI)、業務邏輯層(BLL)、數據訪問層(DAL),不管去到哪裏,這3個都少不掉的。

界面層(UI):指html界面那些。
業務邏輯層(BLL):指您的模型類和數據邏輯操作。
數據訪問層(DAL):指您對數據庫進行操作,一般指CRUD,即增刪改查。

它在Visual Studio中的表現類似這樣子:

UI層調用邏輯層BLL,再調用數據訪問層DAL即可。

二、MVP

這是一個通常使用於android開發的時候的分層。劃分爲視圖層(View)、模型層(Model)、中間層(Presenter)。

視圖層(View):也就是界面層,它調用中間層(Presenter)。指手機界面。
模型層(Model):更具體的說是模型管理層,它調用中間層(Presenter)。指模型管理。
中間層(Presenter):從它的英文Presenter來看,是主持人的意思。也就是它會負責協調視圖層和模型層之間的溝通,本層通常持有視圖層的對象以及模型層的對象,可以對它們做協調操作。

它的本質是通過回調來完成通訊的。

二、MVC

這是一個較常用的分層思想,它主要用於網站建設。劃分爲模型(Model)、視圖(View)、控制器(Controller)。

視圖層(View):是指界面層,也就是html代碼那部分。
模型層(Model):指對應於界面,給界面使用的Model實體類。
控制器(Controller):可以操作模型層的實體,它控制數據流向模型對象,並在數據變化時更新視圖。它強制使視圖與模型分離開。

在VisualStudio中,就有一個專門的MVC模型模板。下圖是VS2019創建一個MVC模型應用程序的截圖:

三、WebApi

它實現了前後端分離,是目前前端開發工程師和後端開發工程師共同合作的最好的協同方式,彼此之間儘量減少干擾。

它跟MVC是一樣的,只不過視圖層(View)放在了前端開發工程師的手上。而MVC的話,視圖層還未分離,跟後端代碼仍然是結合在一起的。

WebApi是目前主流的前後端程序員工作方式。

四、MVVM

這是作爲C#程序員纔有的獨家祕訣,至少目前是,以後是不是就不知道了。
獨家是因爲,MVVM目前僅用於WPF和Xamarin開發。這2種都是微軟產品,所以才說是C#程序員纔有的獨家祕訣。

它分爲以下幾個層:

視圖層(View):就是界面層了,類似於html形式的,只不過在這裏是用xaml語言來描述的。
模型層(Model):這個也很好理解,就是把界面上需要用到的屬性參數啊什麼的,構建成一個模型類即可,即建立一個Model類。這個Model類專門給這個視圖界面使用的。
視圖模型層(ViewModel):對於沒有使用過WPF或者Xamarin的程序員來說,要理解這層可就頭大了,因爲它很難想明白。它類似於android安卓開發的MVP中的Presenter這個角色,就是主持人、調度者這種角色。它的作用就是將Model類的對象,綁定到視圖層View上。簡單的說,就是負責綁定數據源,即給界面層的的控件的DataSource賦上值。

五、DDD

目前很火的後端開發模型。中文叫領域驅動設計(domain-driven design,簡稱DDD)。通常這個模型用於前後端分離的後端項目中。

我自己主要作爲後端開發的角色,所以,我最常用的就是這個分層思想了:領域模型。

它主要分爲:

界面層(Host或UI):當然就是前端界面啦。一般是分離的,可能有專門的前端進行維護。
應用層(Application):跟界面層打交道的服務層(Service),通常是以提供WebApi的方式跟界面層互動。
數據共享層(Share):本層一般不是必需的,但建議您擁有。主要是定義服務接口,用於多方使用。同時,本層也可以定義Dto對象,即數據交換類。什麼是數據交換類?一般我們不建議數據庫實體(Entity)直接顯示給前端使用,而是經過轉換成一個模型(Model)後,再把這個數據給前端看。比如數據庫中的字段有身份證敏感信息,如果你一股腦就把Entity暴露給前端,問題就大了。所以要有一個數據交換,也就是Dto。
數據訪問層(Database):好理解,就是操作數據庫了。

關於DDD領域模型,目前最好的例子,是ABP(AspNet Boilerplate )。關於Abp是個什麼東西,你可以自行搜索一下。

 

祝您用餐愉快。