ABP開發框架前後端開發系列---(1)框架的總體介紹

2021-02-14 碼俠江湖

ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程式框架。ABP不僅僅是一個框架,它還提供了一個最徍實踐的基於領域驅動設計(DDD)的體系結構模型。學習使用ABP框架也有一段時間了,一直想全面了解下這個框架的整個來龍去脈,並把想把它使用歷程整理成一個系列出來,不過一直沒有下筆來寫這篇文章的開篇,就是希望能夠深入了解,再深入了解一些,希望自己能夠理解透徹一些,不能誤人子弟,也不想和網上千篇一律的翻譯官網的內容,官網的英文介紹也已經很詳細了,於是我覺得還是以實際使用的過程進行一定的整理會更好。

初次了解ABP框架,對它還是非常驚豔的,它基本上是.NET 領域架構的集大成者,幾乎囊括了我們.NET領域排的上名的各種技術應用,而且它本身可以支持.net framework和.net core兩種技術流派,對它的介紹也是非常感興趣。

1)ABP框架的特點

我們來大概了解下ABP框架涉及到的內容。

依賴注入,這個部分使用 Castle windsor (依賴注入容器)來實現依賴注入,這個也是我們經常使用IOC來處理的方式;

Repository倉儲模式,已實現了Entity Framework、NHibernate、MangoDB、內存資料庫等,倉儲模式可以快速實現對數據接口的調用;

身份驗證與授權管理,可以使用聲明特性的方式對用戶是否登錄,或者接口的權限進行驗證,可以通過一個很細粒度的方式,對各個接口的調用權限進行設置;

數據有效性驗證,ABP自動對接口的輸入參數對象進行非空判斷,並且可以根據屬性的申請信息對屬性的有效性進行校驗;

審計日誌記錄,也就是記錄我們對每個接口的調用記錄,以及對記錄的創建、修改、刪除人員進行記錄等處理;

Unit Of Work工作單元模式,為應用層和倉儲層的方法自動實現資料庫事務,默認所有應用服務層的接口,都是以工作單元方式運行,即使它們調用了不同的存儲對象處理,都是處於一個事務的邏輯裡面;

異常處理,ABP框架提供了一整套比較完善的流程處理操作,可以很方便的對異常進行進行記錄和傳遞;

日誌記錄,我麼可以利用Log4Net進行常規的日誌記錄,方便我們跟蹤程序處理信息和錯誤信息;

多語言/本地化支持,ABP框架對多語言的處理也是比較友好的,提供了對XML、JSON語言信息的配置處理;

Auto Mapping自動映射,這個是ABP的很重要的對象隔離概念,通過使用AutoMaper來實現域對象和DTO對象的屬性映射,可以隔離兩者的邏輯關係,但是又能輕鬆實現屬性信息的賦值;

動態Web API層,利用這個動態處理,可以把Application Service 直接發布為Web API層,而不需要在累贅的為每個業務對象手工創建一個Web API的控制器,非常方便;

動態JavaScript的AJax代理處理,可以自動創建Javascript 的代理層來更方便使用Web Api,這個在Web層使用。

除了這些重要特性外,ABP框架還有很多一些特別的功能或者概念。

多租戶支持(每個租戶的數據自動隔離,業務模塊開發者不需要在保存和查詢數據時寫相應代碼;

軟刪除支持(繼承相應的基類或實現相應接口,會自動實現軟刪除)

系統設置存取管理(系統級、租戶級、用戶級,作用範圍自動管理)

EventBus實現領域事件(Domain Events)

模塊以及模塊的依賴關係實現插件化的模塊處理等等

ABP框架主要還是基於領域驅動的理念來構建整個架構的,其中領域驅動包含的概念有 域對象Entities、倉儲對象Repositories、域服務接口層Domain Services、域事件Domain Events、應用服務接口Application Services、數據傳輸對象DTOs等。一般簡化來說,我們可以只需要保留域對象,標準倉儲對象(不用自定義倉儲接口)、應用服務接口和DTO對象即可,域服務層接口層和自定義的倉儲對象一般情況下可以省略,後面我會介紹這個內容,也就是利用這些對象及關係,快速構建一個易於使用的ABP框架分層。

ABP官方網站:http://www.aspnetboilerplate.com,從裡面可以查看很詳細的案例和文檔說明,可以根據需要下載不同類型的基礎框架。

ABP GitHub源碼地址:https://github.com/aspnetboilerplate,可以下載整個基礎的框架內容,以及相關的樣板案例代碼。

下面是一個比較直觀的ABP框架分層架構圖。

image

上圖只是一個大概的介紹,其實客戶端部分,還應該包括Winform客戶端、控制臺客戶端、WPF客戶端等內容,而瀏覽器的前端-Web前端,還可以包含使用Ant-Design(React)、IView(VUE)、Angular等不同的前端技術來承載界面呈現層。而底層的資料庫支持,還可以接入更多的,包括MS Sqlserver、Oracle、Mysql、PostgreSQL、SQLite等資料庫。

我們可以看到展現層、應用層、領域層、持久化層等幾個不同的分層,每個分層似乎都很好,但是可能需要落實到實處進行進一步的了解,由於目前.net core的技術應用逐漸走向主流,我們就以它的.net core方向進行介紹解讀。

2) Web API優先的架構

縱觀整個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的過程分解》等文章中的闡述。

image

image

image

作為ABP框架的核心、Web API動態發布,為其展現層提供了非常方便的途徑,使得我們可以在利用其強大的後端架構的基礎上,整合了很多.NET的很多技術應用,如前面介紹的很多ABP框架的特性。

前面介紹了基於Web API優先應用的特點,可以為我們產品線的快速擴展提供了很好的技術支撐,而ABP框架是一個比較強大、健壯,而且是集眾多.NET優秀技術應用的集大成者,雖然整合使用ABP框架會比較一般的框架需要花費多一些時間,不過在構建比較大型,又需要強大的後臺的需求下,這種應用場景是非常不錯的,也是一個很好的投資。

3)ABP 框架的項目結構

ABP框架,包含了兩個部分,一個基礎的ABP框架實現(地址https://github.com/aspnetboilerplate/aspnetboilerplate),這個是我們所說的ABP框架的核心實現;

image

一個是基於這個基礎上擴展應用的ABP框架,它整合了框架核心部分,並提供了一些基礎處理模塊,如人員、角色、權限、會話、身份驗證、多租戶、日誌記錄等等內容,我們一般指的ABP框架應用就是這個基礎上擴展自己的業務項目。這個部分,我們可以根據官網上進行一定的選項配置,然後下載使用。

image

下載.net core 項目後,其中後端部分的項目視圖如下所示。

image

我們從這個項目裡面可以看到,它主要是分為下面幾個項目分層。

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項目開發。



作者:伍華聰_開發框架
連結:https://www.jianshu.com/p/30d5cd797826
來源:簡書

相關焦點

  • 最受歡迎的 Java Web 開發框架盤點
    Java開發框架排名列前3名,包括以下: 1) Spring網址:http://projects.spring.io/spring-framework/ 2) JSF網址:http://www.oracle.com/technetwork/java/javaee/download-139288
  • YuebonCore 快速開發框架支持 .Net 5.0
    YuebonCore基於.Net5.0的權限管理及快速開發框架,前後端分離,核心模塊包括:組織機構、角色用戶、權限授權、多系統、多應用管理、定時任務、業務單據編碼規則、代碼生成器等,整合應用最新技術包括Asp.NetCore MVC、EF、Dapper、AutoFac、WebAPI、Swagger、Vue等。它的架構易於擴展,是中小企業的首選。
  • JNPF快速開發平臺的四大開發框架介紹之移動端開發框架
    JNPF快速開發平臺包含的第二個重要的開發框架是移動端開發框架,即可在手機端、小程序端、微信公眾號埠、H5頁面端等各種智能移動終端來搭載快速開發平臺所開發出來的各種APP運用。移動端開發框架還擁有很多強大的功能特點:1.高效集成開發環境:集成開發環境包括工程導向、應用打包、本地調試以及遠程真機 調試等功能,實現一站式開發多端使用;2.實現資源共享:可擴展移動框架與後臺管理系統快速集成,提供通訊錄、人員權限驗證等服務組件,形成一方資源多端使用;
  • 前端開發和後端開發哪個崗位更辛苦
    首先,從事程式設計師工作,無論是從事前端開發還是後端開發,總體上來說都不輕鬆。要判斷前端開發和後端開發哪個崗位更辛苦一些,主要取決於以下幾個方面的因素:第一:開發場景。不同的開發場景對於前後端程式設計師的要求是不同的,通常來說,to B端開發場景下,後端程式設計師更辛苦一些,因為前端的應用場景比較固定,所以變化不會很大。2C端開發場景下,前端程式設計師更辛苦一些,因為前端變化比較多,而且前端開發的要求會比較高,比如很多2C類的網際網路產品幾乎每天都有新的變化。第二:開發崗位。
  • 從後端開發轉職前端開發,我學到了什麼?
    甚至可以說,基本上已經與後端綁定了,直到我被迫轉職,調崗到前端,從此我能為最好的、擁有強大UI交互性的產品編寫代碼,無需過多依賴前端框架,無需框架提供的黑盒幫我挑重擔,還能創造很棒的app。當然,如果打算依賴前端的框架,這個麻煩自然不復存在。但是,我們不想過多地依賴框架,想從頭開始,自己學習前端開發是如何運作的。
  • Laravel框架從9處助力Web應用開發
    【51CTO.com快譯】由Taylor Otwell於2011年開發的Laravel PHP框架,是軟體開發領域的一項創新。它憑藉著敏捷的開發方式,在眾多PHP框架中脫穎而出。這些應用不但非常易於維護和升級,而且其模塊化和可擴展的代碼也便於各類開發人員所理解。本文將向您介紹什麼是Laravel,以及它將如何從九個方面提高Web應用的開發效率和競爭優勢:Laravel框架的歷史和演變Laravel是一個開源框架,旨在利用MVC架構模式,基於Symfony(譯者註:一個開源的PHP Web框架)來創建Web應用程式。
  • Laravel框架改善Web App開發的9種方法
    Laravel PHP框架是軟體開發領域的一項創新。它允許遵循MVC模式進行自定義Web應用程式開發。該框架由泰勒·奧特威爾(Taylor Otwell)在2011年開發,由於其敏捷的開發方法,該框架在其他PHP框架中的地位日益提高。Laravel具有許多優勢和強大的功能,可以更快地構建穩定的應用程式和網站。
  • Node.js成為最受歡迎的後端Web開發框架之一
    Node.js已迅速成為最受歡迎的後端Web開發框架之一。繼續閱讀以了解如何在開發環境上進行設置。似乎每隔幾個月設置任何技術堆棧總是稍微調整一下。這是我最近用來設置我的盒子的信息集合。
  • JNPF快速開發框架介紹,了解什麼是快速開發
    JNPF快速開發框架是一個可復用的設計構件,使用JNPF的編程人員可以在一個通用功能已經實現的基礎上開始具體的系統開發;簡單來講,軟體開發框架可以理解為我們蓋樓房時,用梁+柱子+承重牆做起來的鋼筋混凝土結構框架。
  • UWebJava 後臺開發框架
    UWeb框架中集成了權限管理框架專注於為中小企業提供最佳的行業基礎後臺框架解決方案,執行效率、擴展性、穩定性值得信賴,操作體驗流暢,使用非常優化,歡迎大家使用及進行二次開發。項目介紹1、模塊化:全新的架構和模塊化的開發機制,便於靈活擴展和二次開發。
  • 五款優秀Web應用開發的Java框架
    從1996年1月23日的首發到現在,Java已經走過了24個年頭了。根據TIOBE指數(譯者註:該排行榜是根據網際網路上有經驗的程式設計師、課程和第三方廠商的數量,使用搜尋引擎統計出各類排名)的顯示:Java持續排名第一。Java已證明了自己配得上用於定製軟體開發的優秀通用程式語言。
  • 花少教你從零搭建後端框架系列
    七八月份是大學生的畢業季、實習季,花少的部門也來了很多「後浪」(包括前後端開發、產品經理、項目經理等)。看著他們朝氣蓬勃,讓我不禁懷念起了剛畢業的青澀年華。前幾天跟一個UI小姐姐聊起「歲月是把殺zhu刀」,看了我的大學照,竟然說我現在比大學帥,開森的不得了,真的特別喜歡跟那些「真誠」的妹子聊天哈哈哈哈!
  • java快速開發框架工作流程引擎比較
    為了快速高效地開發出WEB應用系統,我們一般都會選擇某些合適的快速開發框架,將對項目的效率至關重要。而java多用於企業應用。越來越多的企業和開發人員選擇java為了更好地幫助大家找到適合自己快速開發框架流程引擎, 快速地完成工作流引擎技術架構選型, 快速地完成項目交付。
  • 初學編程,前端、後端開發哪個更有優勢?
    編程不僅僅就是寫代碼做程序就完了,要去看今年最好的軟體開發技術是哪個,最優秀的程式語言是哪一種,它們又是被應用在哪些領域裡?當你有這些疑問的時候,可以來看這篇文章,這篇文章詳細介紹了前端和後端開發技術的對比,從使用程式語言的不同,到對開發技能的要求,甚至未來的發展規劃都有詳細的介紹。什麼是前端開發?
  • 什麼是漸進式前端開發框架?向您介紹vue,看了就懂了
    簡介Vue (讀音 /vju/,類似於 view)是中國的大神尤雨溪開發的,為數不多的國人開發的世界頂級開源軟體是一套用於構建用戶界面的漸進式框架。Vue 被設計為可以自底向上逐層應用。(下文會介紹什麼是漸進式框架及自底向上逐層應用的概念)MVVM響應式編程模型,避免直接操作DOM , 降低DOM操作的複雜性。
  • Web經典B/S快速開發框架,強大後臺+簡潔UI一體化開發工具
    本框架旨在為.NET開發人員提供一個Web後臺快速開發框架,採用本框架,能夠極大的提高項目開發效率。Java是產品線擴充過程中的一個新產品,目前第一階段開發已完成。今天我們要介紹的是.net版本,由於.net core版本功能與其一致,不再單獨介紹。框架特點:1.框架的主架構為基於.net MVC 的 BS 架構。
  • WebMIS 1.0.0 beta 發布,全棧開發基礎框架
    WebMIS全棧開發基礎框架,包括 PHP / Python / SpringBoot / Phalcon /
  • 打造急速開發框架FastApp
    打造急速開發框架FastApp 由  吧主 分享每日英語No matter how bad your life may seem in the moment, it will always get better.哪怕此刻的生活有多糟糕,也總會有好轉的一天。
  • 2021了你該知道的6個Node.js後端框架
    目前IT行業中將框架用於開發目的發揮著巨大作用。了解和使用框架是現代IT行業的主要工作因素之一。作為開發人員,大家都至少熟悉一個後端框架。以下將推薦一些2021年應該使用的6個流行的後端框架。
  • 5個開發桌面應用程式的JavaScript框架
    5個開發桌面應用程式的JavaScript框架 很久以前,開發客戶端桌面程序需要我們掌握各種複雜的技術,不過現在,我們只需要使用js就可以開發出桌面應用程式,下面我們盤點5個開發桌面應用程式的框架。