ABP框架v2.9已經發布
ABP框架和ABP商業版2.9已經發布,這是3.0之前的最后一個版本!這篇文章將涵蓋本次發布中的新增內容.
ABP框架2.9有哪些新增內容?
你可以中GitHub的發行說明中看到所有的變更.這篇文章將只包括重要特征/變更.
預編譯Razor Pages
在之前的版本, 預構建的頁面(為應用模塊)和視圖組件是在運行時編譯. 現在,它們使用了預編譯. 我們測量的應用程序啟動時間(尤其是MVC UI)已經減少了50%以上.換句話說,它比之前的版本快兩倍.速度變化也影響你第一次訪問某一個頁面時.
這是一個v2.8和v2.9啟動應用程序模板的對比結果:
### v2.8
2020-06-04 22:59:04.891 +08:00 [INF] Starting web host.
2020-06-04 22:59:07.662 +08:00 [INF] Now listening on: https://localhost:44391
2020-06-04 22:59:17.315 +08:00 [INF] Request finished in 7756.6218ms 200 text/html;
Total: 12.42s
### v2.9
2020-06-04 22:59:13.720 +08:00 [INF] Starting web host.
2020-06-04 22:59:16.639 +08:00 [INF] Now listening on: https://localhost:44369
2020-06-04 22:59:18.957 +08:00 [INF] Request finished in 1780.5461ms 200 text/html;
Total: 5.24s
你不用做任何改動就能獲得新方法帶來的益處.重寫UI頁/組件和之前一樣也能正常工作.我們將在v3.0中繼續致力於性能上的提升.
組織單元系統
Identity模塊現在有了呼聲最高的功能: 組織單元!
組織單元系統用來在應用程序中創建分層組織樹.這樣你可以使用該組織樹來授權應用程序中的數據和功能.
文檔將很快到來......
新的Blob存儲包
我們創建了一個新的Blob存儲包用來存儲任意二進制對象.它一般用於在應用程序中存儲文件.這個包提供了一個抽象,因此任何應用程序或模塊都能以存儲提供器無關的方式來保存和獲取文件.
目前實現了兩個存儲提供器:
- Volo.Abp.BlobStoring.FileSystem包, 在本地文件系統中存儲對象/文件.
- Volo.Abp.BlobStoring.Database模塊, 在數據庫中存儲對象/文件.目前支持Entity Framework Core(因此,你可以使用任何關系數據庫和MongoDB).
Azure BLOB提供器將會在3.0中可用. 你可請求其他的雲提供器或在GitHub庫上提交你自己的貢獻.
Blob存儲系統的一個好處是,它允許你創建多個容器(每個容器是一個Blob存儲),並為每個容器使用不同的存儲提供器.
示例:使用默認的容器保存和取得一個字節數組
public class MyService : ITransientDependency
{
private readonly IBlobContainer _container;
public MyService(IBlobContainer container)
{
_container = container;
}
public async Task FooAsync()
{
//保存一個BLOB
byte[] bytes = GetBytesFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", bytes);
//獲取一個BLOB
bytes = await _container.GetAllBytesAsync("my-unique-blob-name");
}
}
它可以使用byte[]
和Stream
對象.
示例:使用類型化(命名)容器來保存和獲取stream
public class MyService : ITransientDependency
{
private readonly IBlobContainer<TestContainer> _container;
public MyService(IBlobContainer<TestContainer> container)
{
_container = container;
}
public async Task FooAsync()
{
//保存一個BLOB
Stream stream = GetStreamFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", stream);
//獲取一個BLOB
stream = await _container.GetAsync("my-unique-blob-name");
}
}
TestContainer
只是一個用來標識容器的空類:
[BlobContainerName("test")] //指定容器的名字
public class TestContainer
{
}
類型化(命名)容器可被配置為使用不同的存儲提供器而不是默認的.在開發可復用的模塊時, 始終使用類型化的容器是一個很好的做法,這樣最終應用程序可以為這個容器配置提供器,而不影響其他容器.
示例:為TestContainer
配置文件系統提供器
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<TestContainer>(configuration =>
{
configuration.UseFileSystem(fileSystem =>
{
fileSystem.BasePath = "C:\\MyStorageFolder";
});
});
});
查看blob存儲文檔以獲取更多的信息.
Entity Framework Core的Oracle集成包
我們創建了一個Oralce集成包,這樣你就可以為EF Core輕松地切換到Oracle.它已經為框架和預構建的模塊進行了測試.
查看文檔開始使用Oracle集成包.
自動判斷數據庫提供器
當你用EF Core開發一個可復用的應用程序模塊時,你通常要將你的模塊開發為DBMS無關的.但是,不同的DBMS有一些微小的(有時是很大的)區別.現在如何你執行基於DBMS的自定義映射,可以使用ModelBuilder.IsUsingXXX()
擴展方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Phone>(b =>
{
//...
if (modelBuilder.IsUsingPostgreSql()) //檢查是否在使用PostgreSQL!
{
b.Property(x => x.Number).HasMaxLength(20);
}
else
{
b.Property(x => x.Number).HasMaxLength(32);
}
});
}
除了上面這種的傻傻的例子,你可以任意配置你的映射!
ABP CLI:翻譯命令
abp translate
是一個新的命令,當你的源代碼庫中包含多個JSON本地化文件時, 它可用來簡化翻譯本地化文件,
該命令的主要目的是翻譯ABP框架的本地化文件(因為abp庫在不同的文件中含有成千上萬個本地化文件需要翻譯).
非常感謝如果你使用這個命令將框架資源翻譯為你的母語.
新的虛擬文件系統瀏覽器模塊
感謝@liangshiw創建並貢獻了一個新的模塊用來瀏覽虛擬文件系統中的文件.它適用於MVC UI並顯示所有應用程序中的虛擬文件.示例截圖:
查看文檔學習如何使用它.
示例應用程序:SignalR與分層架構
在分布式/分層架構中實施SignalR是具有挑戰性的.我們創建了一個示例應用程序演示如何輕松地使用SignalR集成和分布式事件總線系統
查看示例解決方案的源代碼.
一篇正在路上的文章將深入地解釋該解決方案.關注@abpframework的Twitter帳號.
一張文章中的圖片,顯示了該解決方案的通信圖
關於gRPC
我們創建了一個示例應用程序來說明如何在基於ABP的應用程序中創建和使用gRPC端點.
查看GitHub上的源碼.
我們本來計划為所有預構建的應用程序模塊創建gRPC端點,但我們發現ASP.NET Core gRPC集成還不夠成熟,不支持一些常見的部署場景.所以推遲到了下一個版本(更多內容查看此評論).但是,在你的應用程序中使用gRPC是非常標准的. ABP框架與gRPC沒有問題.看一下示例應用程序.
其它
其它更新請查看GitHub發行說明.
ABP商業版2.9有哪些新增內容
與往常一樣, 除了ABP框架所有這些功能以外,ABP商業版在本次發布還有一些額外的功能.本節介紹ABP商業版在2.9版本中的亮點.
組織單元管理UI
我們為組織單元創建了UI,管理ABP商業版Identity模塊的成員和角色:
OU管理適用於MVC(Razor Pages)和Angular用戶界面.
聊天模塊Angular UI
我們在前一個版本介紹了新的聊天模塊, 當時它只有ASP.NET Core MVC / Razor Pages UI. 現在它也包含了一個Angular UI選項.
聊天模塊的截圖 - 兩個用戶互相發消息
Easy CRM Angular UI
Easy CRM是建立在ABP商業版上的一個示例應用程序, 用來為ABP商業版客戶提供一個相對復雜的應用程序.在2.7版本中,我們已經發布了MVC / Razor Pages UI. 這次2.9版中, 我們為Easy CRM應用程序發布了Angular UI.
Easy CRM應用程序中"訂單詳細"的截圖.
查看Easy CRM文檔學習如何下載並運行它.
ABP Suite模塊代碼生成
ABP Suite是一個工具,主要功能是用來為一個實體生成代碼, 從數據庫到UI層具有完整的CRUD功能.
ABP Suite的截圖: 定義新實體的屬性並且為你生成應用程序代碼!
在本次發布之前它只工作於應用程序模板.現在,它支持為模塊項目生成代碼.利用代碼生成的威力來創建可復用應用程序模塊是很棒的一個做法.
除了這個主要功能,我們在這個版本中向ABP Suite添加了許多細微的改進.
注意:模塊模板代碼生成目前處於測試階段.如果你發現任何bug,請告知我們.
Lepton主題
Lepton主題是我們為ABP商業版開發的一個商業主題.
- 與Bootstrap 100%兼容 - 讓你不寫主題特定的HTML!
- 提供不同類型的風格 - 看一下下圖中的Material風格.
- 提供不同類型的布局(側/頂部菜單,流式/盒式布局...).
- 輕量化,響應式和現代化.
- 還有...它是可升級的,沒有成本!你只需更新NuGet / NPM包來獲得新的功能.
我們創建了它的專屬網站:http://leptontheme.com/
在這里你可以查看所有的組件, 無需單獨的應用程序.
這個網站目前正處於一個非常早期的階段.我們將創建文檔和和改進網站, 來為你的開發提供參考和探索主題的功能.
即將推出:文件管理模塊
基於新的blob存儲系統(上面介紹的),我們已經開始構建一個文件管理模塊用來管理(瀏覽/上傳/下載)你應用程序中分層文件系統並在用戶與客戶之間分享文件.
我們計划在ABP商業版v3.0中發行最初版本,並繼續進行后續版本的改進.
關於下一個版本:3.0
我們在v2.8和v2.9中增加了許多新的功能.在下一個版本中,我們將完全專注於文檔,性能優化和其它改進,如bug修復.
長期以來,我們每2周發布一個新功能版本.我們在v3.0以后繼續這種方式.但是,v3.0是一個例外,開發周期大概為4周.v3.0的計划發布日期是2020年7月1日.
彩蛋:文章!
除了開發我們的產品,我們的團隊都在不斷地撰寫各種主題的文章/教程.你可以看一下最新的文章: