分析 ABP Framework 好上手,不好深入的原因,探索學習 ABP Framework 的最佳姿勢。
離寫上一篇經驗總結 ABP Framework 研習社經驗總結(6.28-7.2) ,已經過去兩周。
ABP Framework 研習社(QQ群:726299208) 最近兩周,又迎來了很多新夥伴,成員數量上升至300+。
從大家的關注度和群内讨論的活躍度來看, ABP Framework 在國内 .NET 開發社群的人氣還是很高的。我們也看到了很多小夥伴已經開始在自己的項目中使用該架構,甚至在群裡曬出自己的項目代碼,探讨技術解決方案。
回歸正題:ABP Framework 為什麼好上手,不好深入?
首先要從 ABP Framework 定位開始說起,ABP Framework 是一個基于 ASP .NET Core 的完整的基礎設施架構,遵循軟體開發的最佳實踐,采用最新技術,建立現代網絡應用。(摘自官方介紹)
從 ABP Framework 的定位上看:
- 需要 ASP .NET Core 基礎,ABP Framework 不是要替代 ASP .NET Core ,而是對 ASP .NET Core 的補充和增強,提供開箱即用的基礎設施。
- 需要了解軟體開發思想,ABP Framework 遵循軟體開發最佳實踐,啟動模闆項目采用領域驅動設計(DDD),推薦但不僅限于DDD,是以了解開發指導思想很重要。
- 需要了解最新的 .NET Core 技術棧,ABP Framework 是開源項目,充分利用開源生态,整合 .NET Core 最新技術棧,通常的方式是在現有技術之上,提供通用的抽象層,抽象層+提供程式實作特定問題的解決方案,是以我們需要圍繞 ABP Framework 掌握更多新技術。
- 面向開發者,ABP Framework 為開發者提供底層的基礎設施,不是一個開箱即用的系統,是為開發一個系統提供支援的架構。在代碼和工作上為開發者提供很多便利。
ABP Framework 最大的特點是子產品化,一切皆子產品!衆多子產品中,從單個功能上看,使用是簡單的,将常用的配置進行封裝,以快速應用;但當多個技術組合使用時,應用難度開始上升,需要很好地駕馭各個子產品!
舉個例子,最近在分析 eShopOnAbp 源碼
v0.1
,項目啟動成功之後,發現非常人性化,隻要設定好資料庫連接配接字元串,會自動建庫、建表、插入預設資料。跟蹤項目源碼其實作使用 EF Core 資料遷移,為了讓資料遷移能夠在微服務架構中适用,資料遷移的執行操作放在分布式事件中處理;為了確定資料庫結構和資料初始化的資料有效性,又引入工作單元;項目架構支援多租戶,是以在資料遷移時單獨處理了租戶資料庫及資料的初始化。
上述處理過程,會綜合使用到 ABP Framework 提供的 資料遷移、種子資料、分布式事件總線、工作單元、多租戶子產品。光看這些術語,就夠頭大的,更何況看源碼。
當然,我們也不要被源碼吓到,ABP Framework 中的源碼實作、子產品設計是非常優雅的,從 eShopOnAbp 項目中摘資料遷移實作的核心代碼:
var isMigrationRequired = false;
//切換為目前租戶
using (CurrentTenant.Change(null))
{
// 如果需要,則建立資料表
// 開啟工作單元(是否需要新的?是;是否需要事務?否)
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
{
//異步擷取所有在程式集中定義但還沒有應用到目标資料庫的遷移。
var pendingMigrations = await ServiceProvider
.GetRequiredService<TDbContext>()
.Database
.GetPendingMigrationsAsync();
//如果存在遷移
if (pendingMigrations.Any())
{
//通過分布式事務總線釋出消息,資訊包含 DatabaseName 。
await DistributedEventBus.PublishAsync(
new ApplyDatabaseMigrationsEto
{
DatabaseName = DatabaseName
}
);
isMigrationRequired = true;
}
await uow.CompleteAsync();
}
return isMigrationRequired;
}
對代碼做了注釋,應該很容易看明白,有架構基礎功能支援,在代碼層面像搭建樂高積木一樣,實作了支援微服務環境下、支援多租戶、考慮了資料完整性的自動資料遷移功能!
那麼,應該如何從零開始掌握 ABP Framework 呢?有沒有捷徑?
個人建議是:
- 在學習時,小步快走,各個子產品分而治之!不可急于求成。
- 在應用時,采用漸進式,從自己感興趣或項目需要用到的功能子產品開始,架構中每一個子產品是可以單獨使用、靈活拆分的。
當各個子產品都有所熟悉時,開始上項目,在解決問題的過程加深了解。實際項目開發中,并不是要将所有子產品都掌握後,才能上手。邊用邊了解,邊實踐邊總結!
那麼,有難度,值不值得我們花比較多時間進行技術積累呢? 掌握之後會不會過時?
個人認為,ABP Framework 是 .NET 開發技術的一個高度,能夠應用、讀懂源碼、二次開發、搭建架構,絕對是技術能力的展現;架構背後的設計思想、編碼規範、最佳實踐會讓開發者受益良多,絕對是你值得投入時間深入、長期學習的開源架構。
對架構的熟悉會有一個過程, ABP Framework 最終指向微服務架構,是初、中級.Net開發往進階開發甚至架構師進階修煉的路徑之一。你值得擁有!
寫此文章,算是抛磚引玉!
關注 ABP Framework 最新開發進度,後面還會陸續釋出新功能詳解、新功能示例等系列文章,敬請關注!
ABP Framework 研習社(QQ群:726299208)
專注 ABP Framework 學習,經驗分享、問題讨論、示例源碼、電子書共享,歡迎加入!
dotNET兄弟會-公衆号
專注.Net開源技術及跨平台開發!緻力于建構完善的.Net開放技術文庫!為.Net愛好者提供學習交流家園!
記錄技術修行中的反思與感悟,以碼傳心,以軟制道,知行合一!