什么是ASP.NET Boilerplate Project(ABP)框架
使用.NET技術進行開發已經多年,偶爾一次網絡上搜索.NET開發框架,看到了ABP這個框架,引起了我極大的興趣,于是決定對該框架進行深入學習和研究,并將過程全部記錄如下,對自己也是一次學習和總結,同時后繼我也會分享出來,幫到更多.NET開發者在項目開發中能獨擋一面,自己搭建框架,提升開發能力和系統架構水平,為今后的職業發展起到助推作用。
一、?什么是ABP框架?
ABP框架全稱為“ASP.NET Boilerplate Project”,中文翻譯為“ ASP.NET樣板項目”,誕生的主要目的就是為了讓.NET程序員“秒變”架構師,將.NET企業級項目的主流開發技術、最先進的架構整合起來,讓.NET工程師能夠更快的開發出更好的項目。
ABP官方網站:http://www.aspnetboilerplate.com/ (這個十分重要,開發項目需從官網生成框架源碼,從而在VS中載入框架項目的sln文件)
ABP GitHub源碼地址:https://github.com/aspnetboilerplate
ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程序的新起點,它旨在成為一個通用的WEB應用程序框架和項目模板。
ASP.NET Boilerplate 基于DDD的經典分層架構思想,實現了眾多DDD的概念(但沒有實現所有DDD的概念)。
框架所包含技術如下:
1、 .NET MVC 5、Web API 2、C# 5.0。
2、領域驅動設計,如實體、倉儲、領域服務、領域事件、應用服務、數據傳輸對象、工作單元等。
3、分層體系結構:基礎設施層 -> 領域層 -> 應用層 -> 展現層。
4、提供一個基礎架構來開發可重用可配置的模塊。
5、集成現今主流流行的前端開發框架(Bootstrap、Less、AngularJs、jQuery、Modernizr、jQuery.validate、jQuery.form、jQuery.blockUI、json2等)。
6、提供一個基礎架構實現IOC(依賴注入,主要采用Castle Windsor)。
7、支持并實現數據遷移,這里主要采用Entity Framework。
8、模塊化開發,每個模塊可單獨指定數據庫,擁有獨立的EF DbContext。
9、包含一個簡單靈活的多語言/本地系統。
10、通過EventBus實現服務端全局領域事件。
11、統一異常處理,應用層不需要自己寫異常處理代碼。
12、提供針對Application層方法的參數有效性認證。
13、通過Application Service創建Web API層,無需編寫ApiController。
14、提供基類幫助用戶實現一些常見任務。
15、約定優于配置。
16、Zero模塊提供身份驗證、授權管理、用戶&角色管理、系統設置存取管理、審計日志。
ASP.NET ZERO 是 利用ABP框架搭建的模板項目,它會提供預建的頁面及強大的基礎設施架構。利用它提供的基礎框架代碼能讓你快速的開發你的應用層。
使用說明:
1、先編譯成功,Nuget下載ABP的依賴dll
2、在建立一個名為AbpZeroTemplate的數據庫,并修改web.config里的連接字符串
3、選擇MyCompanyName.AbpZeroTemplate.Web為啟動項,F5運行,此時會自動生成數據庫表結構
4、VS菜單:工具->Nuget 程序包管理器->程序包管理器控制臺
默認項目里選擇:MyCompanyName.AbpZeroTemplate.EntityFramework
PM>update-database 回車
5、再次F5運行即可進入登錄,初始帳號:admin 密碼:123qwe
6、關于重命名查找:namespace MyCompanyName. 替換為:namespace ABC.
?
?
?
其中,ABP的體系結構圖如下:
?
一個簡單的解決方案,大致包含5個項目,每一層可以用一個或多個程序集來實現。
?
1、領域層(Domain)
領域層就是業務層,是一個項目的核心,所有業務規則都應該在領域層實現。
實體(Entity)實體代表業務領域的數據和操作,在實踐中,通過用來映射成數據庫表。
倉儲(Repository)倉儲用來操作數據庫進行數據存取。倉儲接口在領域層定義,而倉儲的實現類應該寫在基礎設施層。
領域服務(Domain service)當處理的業務規則跨越兩個(及以上)實體時,應該寫在領域服務方法里面。
領域事件(Domain Event)在領域層某些特定情況發生時可以觸發領域事件,并且在相應地方捕獲并處理它們。
工作單元(Unit of Work)工作單元是一種設計模式,用于維護一個由已經被修改(如增加、刪除和更新等)的業務對象組成的列表。它負責協調這些業務對象的持久化工作及并發問題。
2、應用層(Application)
應用層提供一些應用服務(Application Services)方法供展現層調用。一個應用服務方法接收一個DTO(數據傳輸對象)作為輸入參數,使用這個輸入參數執行特定的領域層操作,并根據需要可返回另一個DTO。在展現層到領域層之間,不應該接收或返回實體(Entity)對象,應該進行DTO映射。一個應用服務方法通常被認為是一個工作單元(Unit of Work)。用戶輸入參數的驗證工作也應該在應用層實現。ABP提供了一個基礎架構讓我們很容易地實現輸入參數有效性驗證。建議使用一種像AutoMapper這樣的工具來進行實體與DTO之間的映射。
3、基礎設施層(Infrastructure)
當在領域層中為定義了倉儲接口,應該在基礎設施層中實現這些接口。可以使用ORM工具,例如EntityFramework或NHibernate。ABP的基類已經提供了對這兩種ORM工具的支持。數據庫遷移也被用于這一層。
4、Web與展現層(Web&Presentation)
Web層使用ASP.NET MVC和Web API來實現。可分別用于多頁面應用程序(MPA)和單頁面應用程序(SPA)。在SPA中,所有資源被一次加載到客戶端瀏覽器中(或者先只加載核心資源,其他資源懶加載),然后通過AJAX調用服務端WebApi接口獲取數據,再根據數據生成HTML代碼。不會整個頁面刷新。現在已經有很多SPA的JS框架,例如: AngularJs、 DurandalJs、BackboneJs、EmberJs。 ABP可以使用任何類似的前端框架,但是ABP提供了一些幫助類,讓我們更方便地使用AngularJs和DurandalJs。
在經典的多頁面應用(MPA)中,客戶端向服務器端發出請求,服務器端代碼(ASP.NET MVC控制器)從數據庫獲得數據,并且使用Razor視圖生成HTML。這些被生成后的HTML頁面被發送回客戶端顯示。每顯示一個新的頁面都會整頁刷新。
SPA和MPA涉及到完全不同的體系結構,也有不同的應用場景。一個管理后臺適合用SPA,博客就更適合用MPA,因為它更利于被搜索引擎抓取。
SignalR是一種從服務器到客戶端發送推送通知的完美工具。它能給用戶提供豐富的實時的體驗。
已經有很多客戶端的Javascript框架或庫,JQuery是其中最流行的,并且它有成千上萬免費的插件。使用Bootstrap可以讓我們更輕松地完成寫Html和CSS的工作。
ABP也實現了根據Web API接口自動創建 Javascript的代碼函數,來簡化JS對Web Api的調用。還有把服務器端的菜單、語言、設置等生成到JS端。(但是在我自己的項目中,我是把這些自動生成功能關閉的,因為必要性不是很大,而這些又會比較影響性能)。
ABP會自動處理服務器端返回的異常,并以友好的界面提示用戶。
5、其他層:
ABP使用Castle Windsor為整個程序框架提供依賴注入的功能。使用Log4Net日志記錄組件,提供給其他各層調用以進行日志記錄。
總結
以上是生活随笔為你收集整理的什么是ASP.NET Boilerplate Project(ABP)框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信信用卡还款额度是多少
- 下一篇: 35解释器模式(Interpreter