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條件,循環等等.
model
用於將數據傳遞到模板(就像ASP.NET Core MVC).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
用來設置應用程序的默認資源類型.通過這種方式,當資源未指定時, 本地化系統使用默認的資源.最新的應用程序啓動模板已經配置了,你也可以爲你現有的應用程序設置它. - 權限定義新增了
IsEnabled
.通過這種方式,你可以從應用程序中完全禁用權限和隱藏相關功能.這可在一些應用程序中做爲功能開關的方式.用法請參見#3486. - 框架中定義的所有本地化資源新增了荷蘭語和德語本地化.感謝貢獻者們.
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商業版提供內置功能,主題和工具, 如果你的需求涉及到這些, 就可以節省你的時間.除此之外還有框架的高級支持和預構建模塊.