ABP 基于DDD的.NET開發(fā)框架

ABP總體介紹

  • ABP是ASP.NET Boilerplate Project裙戏,ASP.NET樣板項目矛渴。
  • ABP框架定位于快速開發(fā)
  • ABP是一個用于最快實踐和流行開發(fā)現(xiàn)代Web應(yīng)用程序的新起點柳畔,旨在成為一個通用的Web應(yīng)用程序框架和項目模板并扇。
  • ABP基于DDD的經(jīng)典分層架構(gòu)思想象泵,實現(xiàn)了眾多DDD的概念。

官方文檔:https://aspnetboilerplate.com/Pages/Documents

什么是ABP呢瑰枫?

服務(wù)端

  • ASP.NET MVC和Web API
  • 實現(xiàn)領(lǐng)域驅(qū)動設(shè)計DDD踱葛,包括實體、存儲庫光坝、領(lǐng)域服務(wù)尸诽、應(yīng)用程序服務(wù)、DTO盯另、UnitOfWork...
  • 實現(xiàn)分層架構(gòu):領(lǐng)域?qū)友纺薄?yīng)用程序、表示層土铺、基礎(chǔ)結(jié)構(gòu)層
  • 提供基礎(chǔ)設(shè)施,為大型項目開發(fā)可重用和可組合的模塊板鬓,使其依賴注入(使用Castle Windsor作為DI容器)悲敷。
  • 提供嚴格的模型和基類,輕松使用對象關(guān)系映射ORM(直接支持EF)俭令。
  • 支持并實現(xiàn)數(shù)據(jù)庫遷移Migration
  • 包括簡單靈活的本地化系統(tǒng)后德,多語言。
  • 包含服務(wù)端全局領(lǐng)域事件和EventBus
  • 管理異常處理和驗證
  • 為應(yīng)用程序服務(wù)創(chuàng)建動態(tài)WebApi層
  • 提供基本和輔助類實現(xiàn)常見任務(wù)
  • 使用約定優(yōu)于配置的原則

客戶端

  • 提供項目模板為單頁應(yīng)用程序SPA和多頁應(yīng)用程序MPA抄腔,模板基于Bootstrap瓢湃。
  • 常用jQuery和AngularJS庫
  • 創(chuàng)建動態(tài)JS代理以輕松調(diào)用應(yīng)用程序服務(wù)理张,使用動態(tài)WebAPI層。
  • 包含獨特的任務(wù)API

ABP功能特性

基礎(chǔ)設(shè)施層

  • 依賴注入DI
  • Session管理
  • 緩存機制
  • 日志管理
  • 鍵值管理
  • 時間管理

領(lǐng)域?qū)?/p>

  • 實體
  • 值對象
  • 倉儲
  • 領(lǐng)域服務(wù)
  • 規(guī)約管理
  • 工作單元
  • 領(lǐng)域事件
  • 數(shù)據(jù)過濾

應(yīng)用層(動態(tài)WebApi)

  • 應(yīng)用服務(wù)
  • 數(shù)據(jù)傳輸對象DTO
  • 驗證數(shù)據(jù)傳輸對象
  • 授權(quán)
  • 功能管理
  • 審計日志

展現(xiàn)層

  • ASP.NET MVC
  • 本地化
  • 菜單導(dǎo)航
  • 嵌入資源
  • JS API
  • CSRF/XSRF保護

WebApi

  • WebApi控制器
  • 動態(tài)WebAPI
  • Odata集成
  • SwaggerUI集成

ORM

  • EntityFramework集成
  • EntityFramework Core集成
  • NHibernate集成

后臺服務(wù)

  • 后臺作業(yè)
  • Hangfire集成
  • Quartz集成

實時服務(wù)

  • 通知系統(tǒng)
  • Signal集成

ModuleZero

ABP框架是可以獨立服務(wù)于其他任何數(shù)據(jù)庫的绵患,并盡可能使用他們能夠通用雾叭。因此,有也就沒有實行有關(guān)存儲數(shù)據(jù)的功能落蝙。如審計日志织狐、Session管理、授權(quán)...

ModuleZero實現(xiàn)了ABP框架的所有基礎(chǔ)概念筏勒,如租戶管理(多租戶)移迫、角色管理、用戶管理管行、Session厨埋、授權(quán)(權(quán)限)管理、設(shè)置管理捐顷、語言管理荡陷、審計日志等。

Microsoft ASP.NET Identifity框架

ASP基礎(chǔ)框架組建功能

  • 基礎(chǔ)框架組件獨立套菜、通用亲善,可用于多個不同項目,類似于daxnet的Apworks框架逗柴。
  • 對項目實現(xiàn)模塊化提供了支持蛹头,每個模塊有獨立的EF DbContext,可單獨指定數(shù)據(jù)庫戏溺。
  • 對DDD的技術(shù)實現(xiàn)進行了封裝渣蜗,讓項目以及其精簡的代碼,專注于業(yè)務(wù)領(lǐng)域旷祸。
  • 多租戶支持耕拷,每個租戶的數(shù)據(jù)自動隔離,業(yè)務(wù)模塊開發(fā)者無需手動操作TenantID托享。
  • 集成ASP.NET Identifity骚烧,實現(xiàn)登錄認證、功能權(quán)限授權(quán)或驗證闰围、角色和用戶管理赃绊。
  • 集成Log4Net實現(xiàn)日志記錄
  • 集成AutoMapper實現(xiàn)DTO類與實體類的雙向自動轉(zhuǎn)換
  • 實現(xiàn)ApplicationService的方法自動建立相應(yīng)的WebApi方法,AJAX可直接調(diào)用羡榴,無需寫ApiController和Action碧查。
  • 調(diào)用ApplicationService的方法時,自動驗證權(quán)限和參數(shù)有效性,使用相應(yīng)的Attribute標(biāo)注忠售。
  • 繼承自FullAuditeEntity基類的領(lǐng)域?qū)嶓w传惠,會自動實現(xiàn)軟刪除,在數(shù)據(jù)庫用lsDelete字段進行標(biāo)注稻扬。
  • 實現(xiàn)一系列擴展方法簡化編碼

基于DDD的分層結(jié)構(gòu)

  • 領(lǐng)域驅(qū)動設(shè)計(Domain-driven Design)
  • DDD是一種模型驅(qū)動的軟件設(shè)計方式
基于DDD的分層結(jié)構(gòu)

用戶界面(展現(xiàn)層)

負責(zé)向用戶展現(xiàn)信息以及解釋用戶命令

  • 請求應(yīng)用層以獲取用戶所需展現(xiàn)的數(shù)據(jù)
  • 發(fā)送命令給應(yīng)用層要求其執(zhí)行某個命令

應(yīng)用層

很薄的一層卦方,定義軟件要完成的所有任務(wù)。對外為展現(xiàn)層提供各種應(yīng)用功能腐螟,包括查詢或命令愿汰,對內(nèi)調(diào)用領(lǐng)域?qū)樱I(lǐng)域?qū)ο蠡蝾I(lǐng)域服務(wù))各種業(yè)務(wù)邏輯,應(yīng)用層不包含業(yè)務(wù)邏輯乐纸。

領(lǐng)域?qū)?/p>

負責(zé)表達業(yè)務(wù)概念衬廷,業(yè)務(wù)狀態(tài)信息以及業(yè)務(wù)規(guī)則,領(lǐng)域模型處于此層汽绢,是業(yè)務(wù)軟件的核心吗跋。

基礎(chǔ)設(shè)施層

基礎(chǔ)設(shè)施層為其他層提供通用的技術(shù)能力,提供層間的通信宁昭,為領(lǐng)域?qū)訉崿F(xiàn)持久化機制跌宛。總之积仗,基礎(chǔ)設(shè)施層可以通過架構(gòu)或框架來支持其他層的技術(shù)需求疆拘。

DDD
ABP

ABP目錄結(jié)構(gòu)

ABP
  • Core 領(lǐng)域?qū)樱娣艠I(yè)務(wù)實體和倉儲接口寂曹。
  • Application 應(yīng)用服務(wù)層
  • EntityFramework 基礎(chǔ)設(shè)施層哎迄,存放實體映射文件和倉儲實現(xiàn)類等。
  • Web 展現(xiàn)層隆圆,使用ASP.NET MVC漱挚。
  • WebApi 展現(xiàn)層,使用ASP.NET WebAPI渺氧。
image.png

數(shù)據(jù)庫設(shè)置

<connectionStrings>
  <add name="Default" connectionString="Server=.; Database=MPA; User ID=sa; Password=sa" providerName="System.Data.SqlClient" />
</connectionStrings>
image.png
image.png
未能加載文件或程序集“Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc”或它的某一個依賴項旨涝。找到的程序集清單定義與程序集引用不匹配。 (異常來自 HRESULT:0x80131040)
image.png
image.png
數(shù)據(jù)庫中已存在名為 'AbpAuditLogs' 的對象
解決方案:注釋201807270535111_Updated_ABP.cs內(nèi)的相同表代碼

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201707261347311_Initial_Migration, 201710131316266_UpgradedTo_ABP_3.1, 201801311121458_Modified_Authorization_Entities, 201803261403237_Upgraded_To_Abp_v3_5, 201807270535111_Updated_ABP, 201807271154374_Upgraded_ABP_3.8.1].
Applying explicit migration: 201707261347311_Initial_Migration.
Applying explicit migration: 201710131316266_UpgradedTo_ABP_3.1.
Applying explicit migration: 201801311121458_Modified_Authorization_Entities.
Applying explicit migration: 201803261403237_Upgraded_To_Abp_v3_5.
Applying explicit migration: 201807270535111_Updated_ABP.
Applying explicit migration: 201807271154374_Upgraded_ABP_3.8.1.
Running Seed method.

登陸賬戶:admin
賬戶密碼:123qwe

https://v.qq.com/x/page/m0391qcwhyv.html

ABP代碼生成器

ABP Code Generator

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侣背,一起剝皮案震驚了整個濱河市白华,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贩耐,老刑警劉巖衬鱼,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異憔杨,居然都是意外死亡,警方通過查閱死者的電腦和手機蒜胖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門消别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛蚤,“玉大人,你說我怎么就攤上這事寻狂∷昃” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵蛇券,是天一觀的道長缀壤。 經(jīng)常有香客問我,道長纠亚,這世上最難降的妖魔是什么塘慕? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蒂胞,結(jié)果婚禮上图呢,老公的妹妹穿的比我還像新娘。我一直安慰自己骗随,他們只是感情好蛤织,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸿染,像睡著了一般指蚜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涨椒,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天摊鸡,我揣著相機與錄音,去河邊找鬼丢烘。 笑死柱宦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的播瞳。 我是一名探鬼主播掸刊,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赢乓!你這毒婦竟也來了忧侧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤牌芋,失蹤者是張志新(化名)和其女友劉穎蚓炬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺屁,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肯夏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驯击。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡烁兰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徊都,到底是詐尸還是另有隱情沪斟,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布暇矫,位于F島的核電站主之,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏李根。R本人自食惡果不足惜槽奕,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朱巨。 院中可真熱鬧史翘,春花似錦、人聲如沸冀续。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪唐。三九已至钻蹬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凭需,已是汗流浹背问欠。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粒蜈,地道東北人顺献。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像枯怖,于是被迫代替她去往敵國和親注整。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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