ABP 框架

ABP 框架基礎(chǔ)知識

ABP是一個開源且文檔友好的應(yīng)用程序框架龄寞。ABP不僅僅是一個框架雷激,它還提供了一個最徍實踐的基于領(lǐng)域驅(qū)動設(shè)計(DDD)的體系結(jié)構(gòu)模型璧疗,可以支持 .net framework和 .net core兩種技術(shù)流派皆的。

ABP 框架特點

  • 依賴注入,這個部分使用 Castle windsor (依賴注入容器)來實現(xiàn)依賴注入究恤,這個也是我們經(jīng)常使用IOC來處理的方式俭令;
  • Repository倉儲模式,已實現(xiàn)了Entity Framework部宿、NHibernate抄腔、MangoDB、內(nèi)存數(shù)據(jù)庫等理张,倉儲模式可以快速實現(xiàn)對數(shù)據(jù)接口的調(diào)用赫蛇;
  • 身份驗證與授權(quán)管理,可以使用聲明特性的方式對用戶是否登錄雾叭,或者接口的權(quán)限進(jìn)行驗證悟耘,可以通過一個很細(xì)粒度的方式,對各個接口的調(diào)用權(quán)限進(jìn)行設(shè)置织狐;
  • 數(shù)據(jù)有效性驗證暂幼,ABP自動對接口的輸入?yún)?shù)對象進(jìn)行非空判斷,并且可以根據(jù)屬性的申請信息對屬性的有效性進(jìn)行校驗移迫;
  • 審計日志記錄旺嬉,也就是記錄我們對每個接口的調(diào)用記錄,以及對記錄的創(chuàng)建起意、修改鹰服、刪除人員進(jìn)行記錄等處理病瞳;
  • Unit Of Work工作單元模式揽咕,為應(yīng)用層和倉儲層的方法自動實現(xiàn)數(shù)據(jù)庫事務(wù)悲酷,默認(rèn)所有應(yīng)用服務(wù)層的接口,都是以工作單元方式運行亲善,即使它們調(diào)用了不同的存儲對象處理设易,都是處于一個事務(wù)的邏輯里面;
  • 異常處理蛹头,ABP框架提供了一整套比較完善的流程處理操作顿肺,可以很方便的對異常進(jìn)行進(jìn)行記錄和傳遞;
  • 日志記錄渣蜗,我么可以利用Log4Net進(jìn)行常規(guī)的日志記錄屠尊,方便我們跟蹤程序處理信息和錯誤信息;
  • 多語言/本地化支持耕拷,ABP框架對多語言的處理也是比較友好的讼昆,提供了對XML、JSON語言信息的配置處理骚烧;
  • Auto Mapping自動映射浸赫,這個是ABP的很重要的對象隔離概念,通過使用AutoMaper來實現(xiàn)域?qū)ο蠛虳TO對象的屬性映射赃绊,可以隔離兩者的邏輯關(guān)系既峡,但是又能輕松實現(xiàn)屬性信息的賦值;
  • 動態(tài)Web API層碧查,利用這個動態(tài)處理运敢,可以把Application Service 直接發(fā)布為Web API層,而不需要在累贅的為每個業(yè)務(wù)對象手工創(chuàng)建一個Web API的控制器么夫,非常方便者冤;
  • 動態(tài)JavaScript的AJax代理處理,可以自動創(chuàng)建Javascript 的代理層來更方便使用Web Api档痪,這個在Web層使用涉枫。

ABP 框架特別的功能

  • 多租戶支持(每個租戶的數(shù)據(jù)自動隔離,業(yè)務(wù)模塊開發(fā)者不需要在保存和查詢數(shù)據(jù)時寫相應(yīng)代碼腐螟;
  • 軟刪除支持(繼承相應(yīng)的基類或?qū)崿F(xiàn)相應(yīng)接口愿汰,會自動實現(xiàn)軟刪除)
  • 系統(tǒng)設(shè)置存取管理(系統(tǒng)級、租戶級乐纸、用戶級衬廷,作用范圍自動管理)
  • EventBus實現(xiàn)領(lǐng)域事件(Domain Events)
  • 模塊以及模塊的依賴關(guān)系實現(xiàn)插件化的模塊處理等等

ABP框架分層架構(gòu)圖

前后端分離的思想,不僅僅可以應(yīng)用在Web的B/S開發(fā)汽绢,同時適用于C/S開發(fā)

  • 前端Web端可以使用Ant-Design(React)吗跋、IView(VUE)、Angular等不同的前端技術(shù)來承載界面呈現(xiàn)層
  • 前端Client 桌面端可以使用MaterialDesign 設(shè)計規(guī)范,按照Prism或者M(jìn)VMMLight 的MVMVM框架結(jié)合應(yīng)用起來

WEB API 優(yōu)先的架構(gòu)

ABP 框架的核心主要以.NET的后端技術(shù)棧為主線跌宛,雖然ASP.NET CORE MVC和 Web API 分成了兩部分酗宋,但是他的動態(tài)發(fā)布為Web API有限的架構(gòu)提供了更好的便利。

在當(dāng)今流行的展現(xiàn)層中疆拘,越來越不依賴于后端的技術(shù)實現(xiàn)蜕猫,而側(cè)重于Web API標(biāo)準(zhǔn)化的對接,基于JSON數(shù)據(jù)的交互處理哎迄。不管是以Ant-Design(React)回右、IView(VUE)、Angular等技術(shù)應(yīng)用的Web前端漱挚,我們可以看到這些架構(gòu)很容易實現(xiàn)對Web API的標(biāo)準(zhǔn)接口對接翔烁,在我較早提供的Winform混合框架里面,也是以Web API優(yōu)先的策略進(jìn)行云端應(yīng)用的部署

ABP 框架的項目結(jié)構(gòu)

ABP 框架包含了兩個部分旨涝,一個基礎(chǔ)的ABP框架租漂,一個ABP基礎(chǔ)框架上的擴展應(yīng)用。提供了人員人員颊糜、角色哩治、權(quán)限、會話衬鱼、身份驗證业筏、多租戶、日志記錄等等內(nèi)容鸟赫,我們一般指的ABP框架應(yīng)用就是這個基礎(chǔ)上擴展自己的業(yè)務(wù)項目蒜胖。這個部分,我們可以根據(jù)官網(wǎng)上進(jìn)行一定的選項配置抛蚤,然后下載使用台谢。

基礎(chǔ)結(jié)構(gòu)組成部分

Package Status
Abp NuGet version
Abp.AspNetCore NuGet version
Abp.Web.Common NuGet version
Abp.Web NuGet version
Abp.Web.Mvc NuGet version
Abp.Web.Api NuGet version
Abp.Web.Api.OData NuGet version
Abp.Web.Resources NuGet version
Abp.Web.SignalR NuGet version
Abp.Owin NuGet version
Abp.EntityFramework.Common NuGet version
Abp.EntityFramework NuGet version
Abp.EntityFramework.GraphDiff NuGet version
Abp.EntityFrameworkCore NuGet version
Abp.NHibernate NuGet version
Abp.Dapper NuGet version
Abp.FluentMigrator NuGet version
Abp.AspNetCore NuGet version
Abp.AspNetCore.SignalR NuGet version
Abp.AutoMapper NuGet version
Abp.HangFire NuGet version
Abp.HangFire.AspNetCore NuGet version
Abp.Castle.Log4Net NuGet version
Abp.RedisCache NuGet version
Abp.RedisCache.ProtoBuf NuGet version
Abp.MailKit NuGet version
Abp.Quartz NuGet version
Abp.TestBase NuGet version
Abp.AspNetCore.TestBase NuGet version

擴展應(yīng)用模板樣式如下,需到官網(wǎng)下載

ABP 模板地址

下載.net core 項目后岁经,其中后端部分的項目視圖如下所示

ABP 擴展模板地址

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

  • Application應(yīng)用層:應(yīng)用層提供一些應(yīng)用服務(wù)(Application Services)方法供展現(xiàn)層調(diào)用缀壤。一個應(yīng)用服務(wù)方法接收一個DTO(數(shù)據(jù)傳輸對象)作為輸入?yún)?shù)樊拓,使用這個輸入?yún)?shù)執(zhí)行特定的領(lǐng)域?qū)硬僮鳎⒏鶕?jù)需要可返回另一個DTO塘慕。

  • Core領(lǐng)域核心層筋夏,領(lǐng)域?qū)泳褪菢I(yè)務(wù)層,是一個項目的核心图呢,所有業(yè)務(wù)規(guī)則都應(yīng)該在領(lǐng)域?qū)訉崿F(xiàn)条篷。這個項目里面骗随,除了定義所需的領(lǐng)域?qū)嶓w類外,其實可以定義我們自己的自定義的倉儲對象(類似DAL/IDAL)赴叹,以及定義自己的業(yè)務(wù)邏輯層(類似BLL/IBLL)蚊锹,以及基于AutoMapper映射規(guī)則等內(nèi)容。

  • EntityFrameworkCore 實體框架核心層稚瘾,這個項目不需要修改太多內(nèi)容,只需要在DbContext里面加入對應(yīng)領(lǐng)域?qū)ο蟮膫}儲對象即可姚炕。

  • Migrator數(shù)據(jù)遷移層摊欠,這個是一個輔助創(chuàng)建的控制臺程序項目,如果基于DB First柱宦,我們可以利用它來創(chuàng)建我們項目的初始化數(shù)據(jù)庫些椒。

  • Web.Core Web核心層,基于Web或者Web API的核心層掸刊,提供了對身份登陸驗證的基礎(chǔ)處理免糕,沒有其他內(nèi)容。

  • Web.Core.Host Web API的宿主層忧侧,也是動態(tài)發(fā)布Web API的核心內(nèi)容石窑,另外在Web API里面整合了Swagger,使得我們可以方便對Web API的接口進(jìn)行調(diào)試蚓炬。

  • Tests 單元測試層松逊,這個提供了一些應(yīng)用層對象的模擬測試,其中測試的數(shù)據(jù)庫使用的是Entity Framework 的內(nèi)存數(shù)據(jù)庫肯夏,不影響實際數(shù)據(jù)庫內(nèi)容经宏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驯击,隨后出現(xiàn)的幾起案子烁兰,更是在濱河造成了極大的恐慌,老刑警劉巖徊都,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪斟,死亡現(xiàn)場離奇詭異,居然都是意外死亡暇矫,警方通過查閱死者的電腦和手機币喧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱耽,“玉大人杀餐,你說我怎么就攤上這事≈炀蓿” “怎么了史翘?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我琼讽,道長必峰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任钻蹬,我火速辦了婚禮吼蚁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘问欠。我一直安慰自己肝匆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布顺献。 她就那樣靜靜地躺著旗国,像睡著了一般。 火紅的嫁衣襯著肌膚如雪注整。 梳的紋絲不亂的頭發(fā)上能曾,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音肿轨,去河邊找鬼寿冕。 笑死,一個胖子當(dāng)著我的面吹牛椒袍,可吹牛的內(nèi)容都是我干的蚂斤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼槐沼,長吁一口氣:“原來是場噩夢啊……” “哼曙蒸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岗钩,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤纽窟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兼吓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臂港,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年视搏,在試婚紗的時候發(fā)現(xiàn)自己被綠了审孽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡浑娜,死狀恐怖佑力,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筋遭,我是刑警寧澤打颤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布暴拄,位于F島的核電站,受9級特大地震影響编饺,放射性物質(zhì)發(fā)生泄漏乖篷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一透且、第九天 我趴在偏房一處隱蔽的房頂上張望撕蔼。 院中可真熱鬧,春花似錦秽誊、人聲如沸鲸沮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至日熬,卻和暖如春棍厌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竖席。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工耘纱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毕荐。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓束析,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憎亚。 傳聞我的和親對象是個殘疾皇子员寇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容