ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程序框架。ABP不只僅是一個框架,它還提供了一個最徍實踐的基於領域驅動設計(DDD)的體系結構模型。學習使用ABP框架也有一段時間了,一直想全面瞭解下這個框架的整個前因後果,並把想把它使用歷程整理成一個系列出來,不過一直沒有下筆來寫這篇文章的開篇,就是但願可以深刻了解,再深刻了解一些,但願本身可以理解透徹一些,不能誤人子弟,也不想和網上千篇一概的翻譯官網的內容,官網的英文介紹也已經很詳細了,因而我以爲仍是以實際使用的過程進行必定的整理會更好。html
初次瞭解ABP框架,對它仍是很是驚豔的,它基本上是.NET 領域架構的集大成者,幾乎囊括了咱們.NET領域排的上名的各類技術應用,並且它自己能夠支持.net framework和.net core兩種技術流派,對它的介紹也是很是感興趣。前端
咱們來大概瞭解下ABP框架涉及到的內容。git
除了這些重要特性外,ABP框架還有不少一些特別的功能或者概念。github
ABP框架主要仍是基於領域驅動的理念來構建整個架構的,其中領域驅動包含的概念有 域對象Entities、倉儲對象Repositories、域服務接口層Domain Services、域事件Domain Events、應用服務接口Application Services、數據傳輸對象DTOs等。通常簡化來講,咱們能夠只須要保留域對象,標準倉儲對象(不用自定義倉儲接口)、應用服務接口和DTO對象便可,域服務層接口層和自定義的倉儲對象通常狀況下能夠省略,後面我會介紹這個內容,也就是利用這些對象及關係,快速構建一個易於使用的ABP框架分層。sql
ABP官方網站:http://www.aspnetboilerplate.com,從裏面能夠查看很詳細的案例和文檔說明,能夠根據須要下載不一樣類型的基礎框架。數據庫
ABP GitHub源碼地址:https://github.com/aspnetboilerplate,能夠下載整個基礎的框架內容,以及相關的樣板案例代碼。後端
下面是一個比較直觀的ABP框架分層架構圖。瀏覽器
上圖只是一個大概的介紹,其實客戶端部分,還應該包括Winform客戶端、控制檯客戶端、WPF客戶端等內容,而瀏覽器的前端-Web前端,還能夠包含使用Ant-Design(React)、IView(VUE)、Angular等不一樣的前端技術來承載界面呈現層。而底層的數據庫支持,還能夠接入更多的,包括MS Sqlserver、Oracle、Mysql、PostgreSQL、SQLite等數據庫。架構
咱們能夠看到展示層、應用層、領域層、持久化層等幾個不一樣的分層,每一個分層彷佛都很好,可是可能須要落實到實處進行進一步的瞭解,因爲目前.net core的技術應用逐漸走向主流,咱們就以它的.net core方向進行介紹解讀。app
縱觀整個ABP框架,它的核心仍是主要以 .NET 的後端技術爲主線,也是着重筆墨的部分,在其展示層中,雖然Asp.NET MVC(包括.net Core部分)和Web API做爲兩個部分,但它的動態發佈Web API,更爲Web API優先的架構提供了很好的便利。
在當今流行的展示層中,愈來愈不依賴於後端的技術實現,而側重於Web API標準化的對接,基於JSON數據的交互處理。不論是以Ant-Design(React)、IView(VUE)、Angular等技術應用的Web前端,咱們能夠看到這些架構很容易實現對Web API的標準接口對接,在我較早提供的Winform混合框架裏面,也是以Web API優先的策略進行雲端應用的部署。以下圖是我在博客《Web API應用架構設計分析(1)》、《Web API應用架構設計分析(2)》、《Web API接口設計經驗總結》、《Winform混合式開發框架訪問Web API接口的處理》、《Web API應用架構在Winform混合框架中的應用(3)--Winform界面調用WebAPI的過程分解》等文章中的闡述。
做爲ABP框架的核心、Web API動態發佈,爲其展示層提供了很是方便的途徑,使得咱們能夠在利用其強大的後端架構的基礎上,整合了不少.NET的不少技術應用,如前面介紹的不少ABP框架的特性。
前面介紹了基於Web API優先應用的特色,能夠爲咱們產品線的快速擴展提供了很好的技術支撐,而ABP框架是一個比較強大、健壯,並且是集衆多.NET優秀技術應用的集大成者,雖然整合使用ABP框架會比較通常的框架須要花費多一些時間,不過在構建比較大型,又須要強大的後臺的需求下,這種應用場景是很是不錯的,也是一個很好的投資。
ABP框架,包含了兩個部分,一個基礎的ABP框架實現(地址https://github.com/aspnetboilerplate/aspnetboilerplate),這個是咱們所說的ABP框架的核心實現;
一個是基於這個基礎上擴展應用的ABP框架,它整合了框架核心部分,並提供了一些基礎處理模塊,如人員、角色、權限、會話、身份驗證、多租戶、日誌記錄等等內容,咱們通常指的ABP框架應用就是這個基礎上擴展本身的業務項目。這個部分,咱們能夠根據官網上進行必定的選項配置,而後下載使用。
下載.net core 項目後,其中後端部分的項目視圖以下所示。
咱們從這個項目裏面能夠看到,它主要是分爲下面幾個項目分層。
Application應用層:應用層提供一些應用服務(Application Services)方法供展示層調用。一個應用服務方法接收一個DTO(數據傳輸對象)做爲輸入參數,使用這個輸入參數執行特定的領域層操做,並根據須要可返回另外一個DTO。
Core領域核心層,領域層就是業務層,是一個項目的核心,全部業務規則都應該在領域層實現。這個項目裏面,除了定義所需的領域實體類外,其實能夠定義咱們本身的自定義的倉儲對象(相似DAL/IDAL),以及定義本身的業務邏輯層(相似BLL/IBLL),以及基於AutoMapper映射規則等內容。
EntityFrameworkCore 實體框架核心層,這個項目不須要修改太多內容,只須要在DbContext裏面加入對應領域對象的倉儲對象便可。
Migrator數據遷移層,這個是一個輔助建立的控制檯程序項目,若是基於DB First,咱們能夠利用它來建立咱們項目的初始化數據庫。
Web.Core Web核心層,基於Web或者Web API的核心層,提供了對身份登錄驗證的基礎處理,沒有其餘內容。
Web.Core.Host Web API的宿主層,也是動態發佈Web API的核心內容,另外在Web API裏面整合了Swagger,使得咱們能夠方便對Web API的接口進行調試。
Tests 單元測試層,這個提供了一些應用層對象的模擬測試,其中測試的數據庫使用的是Entity Framework 的內存數據庫,不影響實際數據庫內容。
以上是ABP框架的整體狀況,咱們到如今尚未正式深刻介紹其中的各個部分,以及若是對這些內容進行優化處理,主要就是介紹一個總體性的ABP框架特性,以及ABP框架側重的Web API方向,後續我繼續對它進行深刻的介紹和項目改造,以便適應咱們實際的ABP項目開發。