ABP框架 v3.0 已發布
我們很高興地宣布,ABP框架和ABP商業版3.0版已經發布.與常規的2周發布一個版本不同的是, 這個版本用了4周的時間.關閉了119個issue,合並了89個pull request 和主框架倉庫中的798次提交.
由於這是一個主要版本,它也包括了一些重大更改.不要害怕,這些變化都容易對應,並且下面會詳細解釋.
詳細更改日志請查看GitHub的發布說明.
ABP框架3.0有哪些新增內容?
這篇文章將只包括重要功能/更改.你可在GitHub的發布說明上看到所有的更改.
Angular 10!
Angular 10剛剛發布,我們就立即遷移了啟動模板到Angular 10!所以,當你以Angular UI創建一個新的解決方案時, 你將獲得新Angular的優點.
我們為想要遷移到Angular 10的老版本項目准備了一份遷移指南.
Oracle集成包
之前我們為使用Devart庫, 基於EF Core for Oracle的應用程序創建了一個集成包, 因為官方的Oracle EF Core包還未支持EF Core 3.1. 現在它以beta發布.雖然是beta版,但我們已經創建了它的集成包,這樣你就可以在你的應用程序中使用它.
更多細節請查看文檔.
Azure BLOB存儲提供器
在上一個版本中我們創建了一個Blob存儲系統, 包含一個文件系統和數據庫存儲提供器. 本次發布我們引入了Azure BLOB存儲提供器.請查看文檔.
分布式緩存批量操作和新的Redis緩存包
ASP.NET Core的標准IDistributeCache接口不包含批量操作,如使用單獨方法/服務器調用設置多個項目. ABP框架引入了新的方法可用於在ABP的IDistributedCache<T>
接口中進行批量操作:
- GetManyAsync / GetMany
- SetManyAsync / SetMany
然后,我們需要為Redis緩存實現這些新方法並且必須創建一個Redis集成包用於擴展微軟的實現.
這些方法也被ABP框架所使用, 用來緩存某個用戶/角色/租戶的設置,功能和權限,並且帶來了顯著的性能提升.
更多細節請查看緩存文檔.
為虛擬文件系統支持嵌入文件清單
虛擬文件系統現在支持在項目中使用GenerateEmbeddedFilesManifest
來添加編譯程序集中嵌入資源的真實的文件/目錄結構.所以,你現在可以訪問文件,而沒有任何文件名的限制(以前,目錄名稱中的一些特殊字符,比如.
在某些情況會有問題)
查看文檔學習如何利用新系統的優點.
新示例
基於社區的需求,我們准備了兩個新的示例應用程序:
- StoredProcedureDemo演示了如何在自定義倉儲庫中調用存儲過程,視圖和函數.
- OrganizationUnitSample演示了如何為你的實體使用Identity模塊的組織單元系統.
DynamicStringLength 和 DynamicMaxLength 屬性
當類被用作模型或DTO時, 標准的StringLength
和MaxLength
數據注解屬性用來驗證類中的屬性是很有用的. 但是, 就像任何其它的屬性一樣, 長度的值應該是一個編譯時已知的字面值(常量).
示例: 使用StringLength
public class CreateBookDto
{
public const int MaxNameLength = 128; //常量!
[StringLength(MaxNameLength)]
public string Name { get; set; }
}
ABP框架現在有DynamicStringLength
和 DynamicMaxLength
屬性允許在運行時確定長度.
示例: 使用DynamicStringLength
public class CreateBookDto
{
public static int MaxNameLength { get; set; } = 128;
[DynamicStringLength(typeof(CreateBookDto), nameof(MaxNameLength))]
public string Name { get; set; }
}
DynamicStringLength
通過類的類型和這個類的一個靜態屬性的名字來讀取最大長度(也有一個最小長度的選項, 就像StringLength
).
這樣就允許你從配置中讀取最大值並且在應用程序啟動時設置(一般在模塊的PreConfigureServices
方法)
CreateBookDto.MaxNameLength = 200;
預建應用程序模塊使用了這個功能,所以你現在可以覆蓋這些模塊中定義的屬性的最大長度了.
自動分布式事件
ABP可以為所有的實體在創建,更新和刪除時自動發布分布式事件. 這很有用因為在分布式系統中你通常會對這些基礎事件感興趣.
這個功能在v3.0中已成熟並文檔化了. 你可以輕松地配置一部分或全部要發布事件的實體.
IAsyncQueryableExecuter
使用LINQ擴展方法,當你在查詢時需要調用ToListAsync()
,FirstOrDefaultAsync()
... 不幸的是,這些方法並不是標准的LINQ擴展方法.它們定義在Microsoft.EntityFrameworkCore包中(或在MongoDB.Driver,如果你使用MongoDB的話).
所以,如果你想使用異步擴展方法, 你需要依賴這個包.這樣做破壞了分層,並且使你的應用程序或領域層依賴於EF Core / MongoDB的包.
IAsyncQueryableExecuter
是ABP框架定義的服務, 用來不依賴特定提供器地執行異步查詢(EF Core / MongoDB包).
查看文檔來獲取細節和了解我們的建議.
API 文檔
現在我們為每次發布ABP框架和模塊都公開API文檔.所以,你可以更容易地查看ABP框架的類.點擊文檔導航菜單中的API文檔的鏈接.
包列表
我們創建了一個頁面列出所有ABP相關的官方NuGet和NPM包.
其他
- 為Identity Server實現了前端通道的服務端客戶登出
abp.currentUser
(Angular UI中的CurrentUser
服務)現在有一個包含當前用戶的角色名的roles
數組.- 升級所有的NuGet和NPM軟件包的依賴.
- 引入了
ReadOnlyAppService
基類(只包含get操作), 做為CrudAppService
基類(其中有get,create,update和delete操作)的補充.
其他更新請查看GitHub發行說明.
ABP商業版3.0有哪些新增內容?
除了所有ABP框架的功能以外,ABP商業版同樣在本次發布中有一些額外的功能.本節介紹3.0版本中ABP商業版的亮點.
新的文件管理模塊
我們創建了一個用於在應用程序中存儲和管理文件的新模塊.這個新模塊基於BLOB存儲系統,因此它可以使用不同的存儲提供器來存儲文件內容.
示例截圖
您可以上傳,下載和以分層文件夾結構組織文件.它也兼容多租戶,你可以為租戶限制總文件大小.在未來的版本中,我們將致力於“共享”系統, 用於以一個更可控的方式在用戶之間或通過公開鏈接與你的客戶共享文件.
文件管理模塊是目前僅適用於MVC / Razor Pages UI.我們正工作於Angular UI,它會在未來的版本中發布.
重大更改
由於這是一個主要版本,我們重新設計了一些API,並引入了一些"容易解決"的重大更改.
ABP框架
- 更改了一些預建應用程序模塊的常量為靜態屬性, 這樣你就可在你的代碼中對它們修改. 如果你在屬性中使用了這些常量,那么請使用上面介紹的
DynamicStringLength
. - 更改
ConcurrencyStamp
最大長度為40. 你需要在更新ABP框架后添加一個數據庫遷移並且更新數據庫. - NPM軟件包的依賴關系使用
~
代替^
,為了更加穩定.
ABP商業版
- 更改了應用程序標識的文件名.此前,它為每個主題使用了單獨的標識文件,如
theme1.png
,theme1-reverse.png
,theme2.png
,theme2-reverse.png
(...6
).現在,我們只有兩個標識文件:logo-light.png
和logo-dark.png
.所以,重命名MVC UI的wwwroot/images/logo/
和Angular UI的/src/assets/images/logo/
下的標識. - 我們也增加了ABP商業版的API文檔.
此外,Angular UI請查看遷移指南.
已知問題
- 3.0.0版本有一個分層架構的問題.查看這個issue為你的應用程序解決它,直到我們發布V3.0.1.
關於未來的版本
我們將繼續在每兩個星期發布一個新的小功能版本.所以,下一個預計發布日期是2020年7月16日的3.1版本.
在接下來的幾個版本中,我們將專注於Blazor UI,如路線圖中承諾的.我們將繼續改進文檔,創建示例,添加其他新功能和改善.關注ABP框架Twitter賬號獲取最新消息...
彩蛋: 文章!
除了開發我們的產品,我們的團隊一直在不斷書寫各種主題的文章/教程.你可能感興趣的最新文章: