ABP是ASP.NET Boilerplate的簡稱,從英文字面上理解它是一個關於ASP.NET的模板,在github上已經有5.7k的star(截止2018年11月21日)。官方的解釋:ABP是一個開源且文檔友好的應用程序框架。ABP不僅僅是一個框架,它還提供了一個最徍實踐的基於領域驅動設計(DDD)的體系結構模型。
ABP與最新的ASP.NET CORE和EF CORE版本保持同步,同樣也支持ASP.NET MVC 5.x和EF6.x。
1、一個簡單的例子:
2、優點:
依賴注入(Dependency Injection):ABP使用並提供了傳統的DI基礎設施。上述TaskAppService類是一個應用服務(繼承自ApplicationService),所以它按照慣例以短暫(每次請求創建一次)的形式自動注冊到DI容器中。同樣的,也可以簡單地注入其他依賴(如事例中的IRepository<Task>)。
部分源碼分析:TaskAppService類繼承自ApplicationService,IApplicaitonServcie又繼承自ITransientDependency接口,在ABP框架中已經將ITransientDependency接口注入到DI容器中,所有繼承自ITransientDependency接口的類或接口都會默認注入。
//空接口
public interface ITransientDependency
{ }
//應用服務接口
public interface IApplicationService : ITransientDependency
{ }
//倉儲接口
public interface IRepository : ITransientDependency
{ }
倉儲(Repository):ABP可以為每一個實體創建一個默認的倉儲(如事例中的IRepository<Task>)。默認的倉儲提供了很多有用的方法,如事例中的FirstOrDefault方法。當然,也可以根據需求擴展默認的倉儲。倉儲抽象了DBMS和ORMs,並簡化了數據訪問邏輯。
授權(Authorization):ABP可以通過聲明的方式檢查權限。如果當前用戶沒有【update task】的權限或沒有登錄,則會阻止訪問UpdateTask方法。ABP不僅提供了聲明屬性的方式授權,而且還可以通過其它的方式。


