ABP Framework 為什麼好上手,不好深入?探討最佳學習姿勢!

iEricLee發表於2021-07-13

離寫上一篇經驗總結 ABP Framework 研習社經驗總結(6.28-7.2) ,已經過去兩週。

ABP Framework 研習社(QQ群:726299208) 最近兩週,又迎來了很多新夥伴,成員數量上升至300+。

image

從大家的關注度和群內討論的活躍度來看, ABP Framework 在國內 .NET 開發社群的人氣還是很高的。我們也看到了很多小夥伴已經開始在自己的專案中使用該框架,甚至在群裡曬出自己的專案程式碼,探討技術解決方案。

迴歸正題:ABP Framework 為什麼好上手,不好深入?

首先要從 ABP Framework 定位開始說起,ABP Framework 是一個基於 ASP .NET Core 的完整的基礎設施框架,遵循軟體開發的最佳實踐,採用最新技術,建立現代網路應用。(摘自官方介紹)

從 ABP Framework 的定位上看:

  1. 需要 ASP .NET Core 基礎,ABP Framework 不是要替代 ASP .NET Core ,而是對 ASP .NET Core 的補充和增強,提供開箱即用的基礎設施。
  2. 需要了解軟體開發思想,ABP Framework 遵循軟體開發最佳實踐,啟動模板專案採用領域驅動設計(DDD),推薦但不僅限於DDD,所以瞭解開發指導思想很重要。
  3. 需要了解最新的 .NET Core 技術棧,ABP Framework 是開源專案,充分利用開源生態,整合 .NET Core 最新技術棧,通常的方式是在現有技術之上,提供通用的抽象層,抽象層+提供程式實現特定問題的解決方案,所以我們需要圍繞 ABP Framework 掌握更多新技術。
  4. 面向開發者,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愛好者提供學習交流家園!

image

相關文章