ABP架構 v2.7.0已經釋出!
ABP架構和ABP商業版 v2.7已經釋出.我們沒有為2.4,2.5和2.6釋出部落格文章,是以這篇文章也将涵蓋這幾個版本中新增内容和過去的2個月裡我們完成了什麼.
關于釋出周期與開發
之前說過我們已經開始每兩個星期釋出一個新的次要功能版本,一般在星期四.我們的目标是盡快提供新功能.
在過去的7-8周裡, 我們在1,300+次送出中完成和合并了數百個issue和pull request, 這隻是ABP架構的庫.每日送出的次數不斷增加:

ABP.IO平台正在快速增長,我們從社群擷取的貢獻越來越多.
ABP架構有哪些新增内容?
對象擴充系統(Object Extending System)
在過去的幾個版本中,我們主要集中在以NuGet/NPM包使用現有子產品時, 提供擴充的方法,
對象擴充系統允許子產品開發者建立可擴充的子產品并允許應用開發者更容易地定制和擴充.
例如,你可以這樣為Identity子產品的User實體添加兩個擴充屬性:
ObjectExtensionManager.Instance
.AddOrUpdate<IdentityUser>(options =>
{
options.AddOrUpdateProperty<string>("SocialSecurityNumber");
options.AddOrUpdateProperty<bool>("IsSuperUser");
}
);
也很容易為這些屬性定義驗證規則:
ObjectExtensionManager.Instance
.AddOrUpdateProperty<IdentityUserCreateDto, string>(
"SocialSecurityNumber",
options =>
{
options.Attributes.Add(new RequiredAttribute());
options.Attributes.Add(
new StringLengthAttribute(32) {
MinimumLength = 6
}
);
});
你甚至可以編寫自定義代碼來驗證屬性.它會自動适用于應用服務, 控制器或頁面的參數對象.
實體的擴充屬性通常存儲在資料庫表的一個單獨的JSON格式的字段中,但是你也可以輕松地使用EF Core映射配置該屬性為一個表字段:
ObjectExtensionManager.Instance
.AddOrUpdateProperty<IdentityUser, string>(
"SocialSecurityNumber",
options =>
{
options.MapEfCore(b => b.HasMaxLength(32));
}
);
請參見有關該系統的詳細資訊對象擴充文檔.
也可參見自定義現有子產品指南,以了解所有可能的自定義選項.
文本模闆包
Volo.Abp.TextTemplating是v2.7.0中新加入的包.此前,Volo.Abp.Emailing包也有類似的功能,但它的功能是有限的,實驗性質的并且和發送郵件緊密耦合在一起.
新文本模闆包允許你定義基于文本的模闆, 可以很容易地本地化和重用.你可以定義布局模闆并且與其它模闆共享.
目前,我們正在使用它發送郵件.一個需要發送郵件的子產品通常定義了一個模闆.如:
<h3>{{L "PasswordReset"}}</h3>
<p>{{L "PasswordResetInfoInEmail"}}</p>
<div>
<a href="{{model.link}}">{{L "ResetMyPassword"}}</a>
</div>
這是一個典型的密碼重置郵件模闆.
- 模闆系統是基于開源的Scriban庫.是以,它支援if條件,循環等等.
-
用于将資料傳遞到模闆(就像ASP.NET Core MVC).model
-
是一個特殊函數用于本地化給定的字元串.L
為所有郵件使用相同的布局是一個典型應用.是以,你可以定義一個布局模闆.這是架構自帶的标準的布局:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
</head>
<body>
{{content}}
</body>
</html>
布局中應該有一個
{{content}}
區域用來呈現子内容(就像MVC中的
RenderBody()
).
最終應用程式可以很容易地通過覆寫模闆内容來自定義它.
每當你需要渲染模闆時,提供模闆名稱和model來使用
ITemplateRenderer
服務.詳情請參見文本模闆文檔.我們甚至還為ABP商業版建立了UI(請參見下面的相關章節).
訂閱異常
ABP架構的異常處理系統會自動處理異常并且為用戶端傳回相應的結果.在某些情況下,你可能希望每當異常發生時有一個回調.通過這種方式,例如,你可以發送郵件或采取基于異常的任何動作.
隻需要在你的應用程式中建立一個從
ExceptionSubscriber
派生的類:
public class MyExceptionSubscriber : ExceptionSubscriber
{
public override async Task HandleAsync(ExceptionNotificationContext context)
{
//TODO...
}
}
更多資訊請參見異常處理.
其他
在之前的釋出中架構也有很多小的功能和改進.這裡列舉幾個:
- 新增了
用來設定應用程式的預設資源類型.通過這種方式,當資源未指定時, 本地化系統使用預設的資源.最新的應用程式啟動模闆已經配置了,你也可以為你現有的應用程式設定它.AbpLocalizationOptions.DefaultResourceType
- 權限定義新增了
.通過這種方式,你可以從應用程式中完全禁用權限和隐藏相關功能.這可在一些應用程式中做為功能開關的方式.用法請參見#3486.IsEnabled
- 架構中定義的所有本地化資源新增了荷蘭語和德語本地化.感謝貢獻者們.
ABP商業版有哪些新增内容?
ABP商業版的目标是基于ABP架構項目提供預建構的應用程式功能,代碼生成工具,專業的主題,先進的示例和進階支援.
我們正在并行工作于ABP商業版與ABP架構功能對齊,并提供更多的子產品,主題選項和工具.
本節将介紹ABP商業版這邊有哪些進展.
子產品實體擴充系統
子產品實體擴充系統是相對于對象擴充系統(上面介紹的)的一個更進階别的API,并提供了一種簡單的方法來向現有實體中增加擴充屬性.一個新的擴充屬性可以很容易地自動成為HTTP API和使用者界面的一部分.
例如:向Identity子產品的User實體中添加
SocialSecurityNumber
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>( //屬性類型: string
"SocialSecurityNumber", //屬性名
property =>
{
//驗證規則
property.Attributes.Add(new RequiredAttribute());
property.Attributes.Add(
new StringLengthAttribute(64) {
MinimumLength = 4
}
);
//...該屬性的其它配置
}
);
});
});
僅通過這樣的配置,使用者界面就将具有新的屬性(在表中和在建立/編輯表單中):
新屬性可以輕松地本地化和驗證.目前,它支援原始類型,如字元串,數字和布爾型,但我們計劃添加更多進階場景(如導航/查找屬性).
請參閱子產品實體擴充指南來了解如何使用和配置的詳細資訊.
其他擴充點
還有其他一些預先定義的點來定制和擴充依賴子產品的使用者界面:
- 你可以為資料表中的實體添加新動作(下方左側的圖).
- 你可以向頁面的工具欄中添加新的按鈕(或其他控件)(下方右側的圖).
- 你可以向資料表中添加自定義列.
請參閱自定義子產品指南,以了解所有可能的方式來定制依賴子產品.
文本模闆管理子產品
我們在v2.7中推出一個新的子產品:文本模闆管理.它基本上是用來在使用者界面上編輯文本/郵件模闆(在ABP架構2.7中加入的),并儲存更改到資料庫中.
一個密碼重置郵件模闆的内容編輯截圖:
當建立新工程時, 這個子產品已經預裝了.
實體曆史視圖
審計日志UI子產品現在顯示所有應用程式中的實體變更, 帶有屬性修改的細節.
當點選實體的動作菜單時, 你還可以檢視實體的曆史資訊:
更多示例
我們正在建立ABP商業版更多進階的示例應用程式.其中一個是簡易CRM, 将在幾天内提供給商業客戶.
這是一個簡易CRM儀表盤的截圖:
具有帳戶,聯系人,産品組,産品,訂單等.
新子產品
我們将繼續改善現有子產品和建立新的子產品.除了上面介紹的新的文本模闆管理, 還有:
- 我們最近釋出了支付子產品,目前對接了PayU和的2Checkout支付網關.更多網關陸續添加.
- 我們已經建立了一個簡單的Twilio短信內建子產品,以通過Twilio發送短信.
- 我們正在開發一個聊天子產品, 将在未來幾周内可用.
- 我們正在緻力于為Identity子產品增加組織單元管理系統, 用于建立分層組織單元(Domain層将是開源和免費的).
更多ABP商業版和ABP架構的子產品,主題和工具選項正在開發中.
ABP架構 VS ABP商業版
我們(Volosoft - ABP.IO平台背後的核心團隊),在ABP架構和ABP商業版上花費幾乎相同的精力,我們認為ABP.IO平台是一個整體.
ABP架構提供了所有的基礎設施和應用程式的獨立架構功能,使你更具生産力,專注于自己的業務代碼,并實作軟體開發最佳實踐.它為你提供不重複作業的一個明确和舒适的開發經驗.
ABP商業版提供内置功能,主題和工具, 如果你的需求涉及到這些, 就可以節省你的時間.除此之外還有架構的進階支援和預構模組化塊.