|
ABP是ASP.NET Boilerplate的簡(jiǎn)稱,ABP是一個(gè)開(kāi)源且文檔友好的應(yīng)用程序框架。ABP不僅僅是一個(gè)框架,它還提供了一個(gè)最徍實(shí)踐的基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的體系結(jié)構(gòu)模型。學(xué)習(xí)使用ABP框架也有一段時(shí)間了,一直想全面了解下這個(gè)框架的整個(gè)來(lái)龍去脈,并把想把它使用歷程整理成一個(gè)系列出來(lái),不過(guò)一直沒(méi)有下筆來(lái)寫這篇文章的開(kāi)篇,就是希望能夠深入了解,再深入了解一些,希望自己能夠理解透徹一些,不能誤人子弟,也不想和網(wǎng)上千篇一律的翻譯官網(wǎng)的內(nèi)容,官網(wǎng)的英文介紹也已經(jīng)很詳細(xì)了,于是我覺(jué)得還是以實(shí)際使用的過(guò)程進(jìn)行一定的整理會(huì)更好。 初次了解ABP框架,對(duì)它還是非常驚艷的,它基本上是.NET 領(lǐng)域架構(gòu)的集大成者,幾乎囊括了我們.NET領(lǐng)域排的上名的各種技術(shù)應(yīng)用,而且它本身可以支持.net framework和.net core兩種技術(shù)流派,對(duì)它的介紹也是非常感興趣。 1)ABP框架的特點(diǎn)我們來(lái)大概了解下ABP框架涉及到的內(nèi)容。
除了這些重要特性外,ABP框架還有很多一些特別的功能或者概念。
ABP框架主要還是基于領(lǐng)域驅(qū)動(dòng)的理念來(lái)構(gòu)建整個(gè)架構(gòu)的,其中領(lǐng)域驅(qū)動(dòng)包含的概念有 域?qū)ο驟ntities、倉(cāng)儲(chǔ)對(duì)象Repositories、域服務(wù)接口層Domain Services、域事件Domain Events、應(yīng)用服務(wù)接口Application Services、數(shù)據(jù)傳輸對(duì)象DTOs等。一般簡(jiǎn)化來(lái)說(shuō),我們可以只需要保留域?qū)ο?,?biāo)準(zhǔn)倉(cāng)儲(chǔ)對(duì)象(不用自定義倉(cāng)儲(chǔ)接口)、應(yīng)用服務(wù)接口和DTO對(duì)象即可,域服務(wù)層接口層和自定義的倉(cāng)儲(chǔ)對(duì)象一般情況下可以省略,后面我會(huì)介紹這個(gè)內(nèi)容,也就是利用這些對(duì)象及關(guān)系,快速構(gòu)建一個(gè)易于使用的ABP框架分層。 ABP官方網(wǎng)站:http://www.,從里面可以查看很詳細(xì)的案例和文檔說(shuō)明,可以根據(jù)需要下載不同類型的基礎(chǔ)框架。 ABP GitHub源碼地址:https://github.com/aspnetboilerplate,可以下載整個(gè)基礎(chǔ)的框架內(nèi)容,以及相關(guān)的樣板案例代碼。 下面是一個(gè)比較直觀的ABP框架分層架構(gòu)圖。
上圖只是一個(gè)大概的介紹,其實(shí)客戶端部分,還應(yīng)該包括Winform客戶端、控制臺(tái)客戶端、WPF客戶端等內(nèi)容,而瀏覽器的前端-Web前端,還可以包含使用Ant-Design(React)、IView(VUE)、Angular等不同的前端技術(shù)來(lái)承載界面呈現(xiàn)層。而底層的數(shù)據(jù)庫(kù)支持,還可以接入更多的,包括MS Sqlserver、Oracle、Mysql、PostgreSQL、SQLite等數(shù)據(jù)庫(kù)。 我們可以看到展現(xiàn)層、應(yīng)用層、領(lǐng)域?qū)?、持久化層等幾個(gè)不同的分層,每個(gè)分層似乎都很好,但是可能需要落實(shí)到實(shí)處進(jìn)行進(jìn)一步的了解,由于目前.net core的技術(shù)應(yīng)用逐漸走向主流,我們就以它的.net core方向進(jìn)行介紹解讀。 2) Web API優(yōu)先的架構(gòu)縱觀整個(gè)ABP框架,它的核心還是主要以 .NET 的后端技術(shù)為主線,也是著重筆墨的部分,在其展現(xiàn)層中,雖然Asp.NET MVC(包括.net Core部分)和Web API作為兩個(gè)部分,但它的動(dòng)態(tài)發(fā)布Web API,更為Web API優(yōu)先的架構(gòu)提供了很好的便利。 在當(dāng)今流行的展現(xiàn)層中,越來(lái)越不依賴于后端的技術(shù)實(shí)現(xiàn),而側(cè)重于Web API標(biāo)準(zhǔn)化的對(duì)接,基于JSON數(shù)據(jù)的交互處理。不管是以Ant-Design(React)、IView(VUE)、Angular等技術(shù)應(yīng)用的Web前端,我們可以看到這些架構(gòu)很容易實(shí)現(xiàn)對(duì)Web API的標(biāo)準(zhǔn)接口對(duì)接,在我較早提供的Winform混合框架里面,也是以Web API優(yōu)先的策略進(jìn)行云端應(yīng)用的部署。如下圖是我在博客《Web API應(yīng)用架構(gòu)設(shè)計(jì)分析(1)》、《Web API應(yīng)用架構(gòu)設(shè)計(jì)分析(2)》、《Web API接口設(shè)計(jì)經(jīng)驗(yàn)總結(jié)》、《Winform混合式開(kāi)發(fā)框架訪問(wèn)Web API接口的處理》、《Web API應(yīng)用架構(gòu)在Winform混合框架中的應(yīng)用(3)--Winform界面調(diào)用WebAPI的過(guò)程分解》等文章中的闡述。
作為ABP框架的核心、Web API動(dòng)態(tài)發(fā)布,為其展現(xiàn)層提供了非常方便的途徑,使得我們可以在利用其強(qiáng)大的后端架構(gòu)的基礎(chǔ)上,整合了很多.NET的很多技術(shù)應(yīng)用,如前面介紹的很多ABP框架的特性。 前面介紹了基于Web API優(yōu)先應(yīng)用的特點(diǎn),可以為我們產(chǎn)品線的快速擴(kuò)展提供了很好的技術(shù)支撐,而ABP框架是一個(gè)比較強(qiáng)大、健壯,而且是集眾多.NET優(yōu)秀技術(shù)應(yīng)用的集大成者,雖然整合使用ABP框架會(huì)比較一般的框架需要花費(fèi)多一些時(shí)間,不過(guò)在構(gòu)建比較大型,又需要強(qiáng)大的后臺(tái)的需求下,這種應(yīng)用場(chǎng)景是非常不錯(cuò)的,也是一個(gè)很好的投資。 3)ABP 框架的項(xiàng)目結(jié)構(gòu)ABP框架,包含了兩個(gè)部分,一個(gè)基礎(chǔ)的ABP框架實(shí)現(xiàn)(地址https://github.com/aspnetboilerplate/aspnetboilerplate),這個(gè)是我們所說(shuō)的ABP框架的核心實(shí)現(xiàn);
一個(gè)是基于這個(gè)基礎(chǔ)上擴(kuò)展應(yīng)用的ABP框架,它整合了框架核心部分,并提供了一些基礎(chǔ)處理模塊,如人員、角色、權(quán)限、會(huì)話、身份驗(yàn)證、多租戶、日志記錄等等內(nèi)容,我們一般指的ABP框架應(yīng)用就是這個(gè)基礎(chǔ)上擴(kuò)展自己的業(yè)務(wù)項(xiàng)目。這個(gè)部分,我們可以根據(jù)官網(wǎng)上進(jìn)行一定的選項(xiàng)配置,然后下載使用。
下載.net core 項(xiàng)目后,其中后端部分的項(xiàng)目視圖如下所示。
我們從這個(gè)項(xiàng)目里面可以看到,它主要是分為下面幾個(gè)項(xiàng)目分層。 Application應(yīng)用層:應(yīng)用層提供一些應(yīng)用服務(wù)(Application Services)方法供展現(xiàn)層調(diào)用。一個(gè)應(yīng)用服務(wù)方法接收一個(gè)DTO(數(shù)據(jù)傳輸對(duì)象)作為輸入?yún)?shù),使用這個(gè)輸入?yún)?shù)執(zhí)行特定的領(lǐng)域?qū)硬僮?,并根?jù)需要可返回另一個(gè)DTO。 Core領(lǐng)域核心層,領(lǐng)域?qū)泳褪菢I(yè)務(wù)層,是一個(gè)項(xiàng)目的核心,所有業(yè)務(wù)規(guī)則都應(yīng)該在領(lǐng)域?qū)訉?shí)現(xiàn)。這個(gè)項(xiàng)目里面,除了定義所需的領(lǐng)域?qū)嶓w類外,其實(shí)可以定義我們自己的自定義的倉(cāng)儲(chǔ)對(duì)象(類似DAL/IDAL),以及定義自己的業(yè)務(wù)邏輯層(類似BLL/IBLL),以及基于AutoMapper映射規(guī)則等內(nèi)容。 EntityFrameworkCore 實(shí)體框架核心層,這個(gè)項(xiàng)目不需要修改太多內(nèi)容,只需要在DbContext里面加入對(duì)應(yīng)領(lǐng)域?qū)ο蟮膫}(cāng)儲(chǔ)對(duì)象即可。 Migrator數(shù)據(jù)遷移層,這個(gè)是一個(gè)輔助創(chuàng)建的控制臺(tái)程序項(xiàng)目,如果基于DB First,我們可以利用它來(lái)創(chuàng)建我們項(xiàng)目的初始化數(shù)據(jù)庫(kù)。 Web.Core Web核心層,基于Web或者Web API的核心層,提供了對(duì)身份登陸驗(yàn)證的基礎(chǔ)處理,沒(méi)有其他內(nèi)容。 Web.Core.Host Web API的宿主層,也是動(dòng)態(tài)發(fā)布Web API的核心內(nèi)容,另外在Web API里面整合了Swagger,使得我們可以方便對(duì)Web API的接口進(jìn)行調(diào)試。 Tests 單元測(cè)試層,這個(gè)提供了一些應(yīng)用層對(duì)象的模擬測(cè)試,其中測(cè)試的數(shù)據(jù)庫(kù)使用的是Entity Framework 的內(nèi)存數(shù)據(jù)庫(kù),不影響實(shí)際數(shù)據(jù)庫(kù)內(nèi)容。 以上是ABP框架的總體情況,我們到現(xiàn)在還沒(méi)有正式深入介紹其中的各個(gè)部分,以及如果對(duì)這些內(nèi)容進(jìn)行優(yōu)化處理,主要就是介紹一個(gè)整體性的ABP框架特性,以及ABP框架側(cè)重的Web API方向,后續(xù)我繼續(xù)對(duì)它進(jìn)行深入的介紹和項(xiàng)目改造,以便適應(yīng)我們實(shí)際的ABP項(xiàng)目開(kāi)發(fā)。 來(lái)源:http://www./content-4-208201.html |
|
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》