點這裡進入ABP開發手記目錄 基於DDD的現代ASP.NET開發框架 - ABP ABP是“ASP.NET Boilerplate Project (ASP.NET樣板項目)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用 ...
基於DDD的現代ASP.NET開發框架 - ABP
ABP是“ASP.NET Boilerplate Project (ASP.NET樣板項目)”的簡稱。
ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的WEB應用程式框架和項目模板。
ABP的官方網站:http://www.aspnetboilerplate.com
ABP在Github上的開源項目:https://github.com/aspnetboilerplate
ABP 的由來
“DRY——避免重覆代碼”是一個優秀的開發者在開發軟體時所具備的最重要的思想之一。我們在開發企業WEB應用程式時都有一些類似的需求,例如:都需要登錄頁面、用戶/角色管理、許可權驗證、數據有效性驗證、多語言/本地化等等。一個高品質的大型軟體都會運用一些最佳實踐,例如分層體繫結構、領域驅動設計、依賴註入等。我們也可能會採用ORM、資料庫遷移(Database Migrations)、日誌記錄(Logging)等工具。
從零開始創建一個企業應用程式是一件繁瑣的事,因為需要重覆做很多常見的基礎工作。許多公司都在開發自己的應用程式框架來重用於不同的項目,然後在框架的基礎上開發一些新的功能。但並不是每個公司都有這樣的實力。假如我們可以分享的更多,也許可以避免每個公司或每個項目的重覆編寫類似的代碼。作者之所以把項目命名為“ASP.NET Boilerplate”,就是希望它能成為開發一般企業WEB應用的新起點,直接把ABP作為項目模板。
ABP是什麼?
ABP是為新的現代Web應用程式使用最佳實踐和使用最流行工具的一個起點。可作為一般用途的應用程式的基礎框架或項目模板。它的功能包括:
伺服器端:
- 基於最新的.NET技術 (ASP.NET Core,EF Cor,ASP.NET MVC 5.x,EF6.x)
- 實現領域驅動設計(實體、倉儲、領域服務、領域事件、應用服務、數據傳輸對象,工作單元等等)
- 實現分層體繫結構(領域層,應用層,展現層和基礎設施層)
- 提供了一個基礎架構來開發可重用可配置的模塊
- 集成一些最流行的開源框架/庫,也許有些是你正在使用的
- 提供了一個基礎架構讓我們很方便地使用依賴註入(使用Castle Windsor作為依賴註入的容器)
- 提供Repository倉儲模式支持不同的ORM(已實現Entity Framework 、NHibernate、MangoDb和記憶體資料庫)
- 支持並實現資料庫遷移(EF 的 Code first)
- 模塊化開發(每個模塊有獨立的EF DbContext,可單獨指定資料庫)
- 包括一個簡單的和靈活的多語言/本地化系統
- 包括一個 EventBus來實現伺服器端全局的領域事件
- 統一的異常處理(應用層幾乎不需要處理自己寫異常處理代碼)
- 數據有效性驗證(Asp.NET MVC只能做到Action方法的參數驗證,ABP實現了Application層方法的參數有效性驗證)
- 通過Application Services自動創建Web API層(不需要寫APIController層了)
- 提供基類和幫助類讓我們方便地實現一些常見的任務
- 使用“約定優於配置原則”
客戶端:
- Bootstrap、jQuery、Angular、Vue、React和其他JS庫: jQuery.validate、jQuery.form、jQuery.blockUI、json2等
- 為單頁面應用程式(Angular,Vue,React)和多頁面應用程式(Bootstrap+jQuery)提供了項目模板。
- 自動創建Javascript 的代理層來更方便使用Web API
- 封裝一些Javascript 函數,更方便地使用ajax、消息框、通知組件、忙狀態的遮罩層等等
除ABP框架項目以外,還開發了名叫“Zero”的模塊,實現了以下功能:
- 用戶,角色,許可權和組織單位管理界面。
- 租戶,版本和功能管理界面,租戶訂閱系統。
- Xamarin移動應用程式。
- 設置管理界面。
- 動態語言管理用戶界面,RTL支持。
- 實時聊天和通知系統。
- 審核日誌報告用戶界面。
- 用戶個人資料,帳戶鏈接,模擬,社交登錄等...
- 基於Metronic的主題。
ABP不是什麼?
ABP 提供了一個應用程式開發模型用於最佳實踐。它擁有基礎類、介面和工具使我們容易建立起可維護的大規模的應用程式。
然而:
它不是RAD工具之一,RAD工具的目的是無需編碼創建應用程式。相反,ABP提供了一種編碼的最佳實踐。
它不是一個代碼生成工具。在運行時雖然它有一些特性構建動態代碼,但它不能生成代碼。
它不是一個一體化的框架。相反,它使用流行的工具/庫來完成特定的任務(例如用EF做ORM,用Log4Net做日誌記錄,使得Castle Windsor作為賴註入容器, Angular,Vue,React 用於SPA 框架)。