玩轉ABP框架——翻譯《Mastering ABP Framework》

張飛洪[廈門]發表於2022-04-21

前言

  大家好,我是張飛洪,謝謝你閱讀我的文章。

  自從土牛Halil ibrahim Kalkan的《Mastering ABP Framework》出版之後,我就開始馬不停蹄進行學習閱讀和翻譯,目前基本保持一週兩章的進度。

為什麼要翻譯?

  ABP的官方文件應該是比較全面了,但是有幾個問題:

  1. 大部分文件中文版都不夠完整和全面,目前的核心語言還是英文,這給那些想要深入學習ABP框架的同學帶來困擾。
  2. Halil ibrahim Kalkan親自寫的最核心的兩本《Implementing Domain Drive Design》(《實現領域驅動設計》,詳見下圖)、《Mastering ABP Framework》(《玩轉ABP 框架》),目前也是英文版本,這兩本相比較官網文件的混合編寫模式,顯然會更加可以近距離貼近ABP作者的真實世界和設計理念。
  3. 翻譯的過程也是回顧-映證-再思考-再明確的一個迭代過程,可以不斷加深自己對ABP的深入瞭解。
  4. 同時自己收益ABP開源,也希望能回報ABP社群。

書名叫什麼

  我曾想過叫《精通ABP框架》,但是整本看完,距離精通其實還是很遠,我理解的精通是能從0-1搭建ABP框架,至少熟練原始碼設計精髓,猶如庖丁解牛,別人看到的是牛的身體,而庖丁看到的是牛裡面的骨架和紋理。

  如果直白翻譯為《掌握ABP框架》、《ABP框架專家》,又感覺和整書的意境不一致,沒有把整書的精髓拿捏住,因為框架是一種設計思想和理念,看不見摸不著,你怎麼去掌,怎麼去握呢?

  當然快速入門等之類的翻譯肯定也不行,因為書還是很厚,內容很乾,根本不可能走捷徑。想來想去先叫《玩轉ABP框架》,好比古詩詞,你怎麼去翻譯床前明月光呢?要不要意境?先暫且這麼叫吧,如果你有更好的命名方式,歡迎您提供寶貴意見。

全書簡介

  大家可以瀏覽一下亞馬遜整書目錄,全書分成四個部分,十七課時,內容從簡單到複雜,從整體架構到細節程式碼,從架構問題到最佳實踐,從基礎架構模組到DDD,從動態API到模組化設計到架構演化,最後還講解了自動化測試等等,內容十分精彩,也非常全面。

  翻譯是一次精神之旅,好比老牛吃草,需要咀嚼和消化再產出的過程。是典型的消費者到生產者的迭代迴圈模式。基本上要把書籍掰開揉碎,吃到肚子裡回爐再造的一個過程。所以,翻譯對個人的成長幫助很大,因為學習本身就是不斷輸入和輸出的過程,通過輸出倒逼自己不斷輸入,先把揹包甩過牆體,再慢慢爬牆,直到翻過去為止。

全書目錄

  翻譯是一項苦力活,因為我既想保留原著的味道,又希望翻譯後的內容是符合漢語的味道,不但在閱讀順暢,又能去除英文的部分囉嗦,可以說翻譯整本書是不斷輸入和輸出的迭代,是魔鬼細節的校對,也是措辭的反覆咀嚼的過程。

  為了尊重原著,也為了對得起讀者,我每翻譯一章就Review兩遍,有時候為了保持清醒的頭腦,我一般會在第二天進行重新審查和校驗,往往會發現很多語法和錯別字等錯誤,所有的努力就是希望能回饋讀者,我相信你在整個閱讀過程一定能體驗到我的用心。

  我的翻譯方式是,翻譯一章實時釋出一章,一般是晚上翻譯,睡一覺,第二天起來校對細節,這樣確保腦袋是清醒,措辭和理解不會有大的偏頗,下面是全書目錄,目前翻譯了將近一半,大家可以先看看效果。【目錄跳轉

有了ABP,還要學其他的框架?

  我有時候在想在JAVA領域,Spring基本一統天下,新手也好,高手也罷都在學習、研究和專案實戰。也就是說其實對與應用開發,Spring已經是繞不開的框架,不管是單體還是微服務都可以輕鬆勝任,學了Spring在JAVA開發層面,其實你可以完全不需要去學習其他的任何知識點,也能參加工作(當然不包括資料庫和前端,我這裡指的是JAVA語言本身)。

  那麼在.NET有沒有類似Spring的框架,讓.NET學員學完之後也可以勝任任何.NET工作,甚至能勝任架構師的角色,我覺得對於開源的ABP vNext來說,是完全可以做到的。因為它足夠簡單,上手非常容易,只要入門之後持續一段時間,我們就可以不斷地在實戰中逐步深入,重要的是開源的資訊量足夠一個架構師去模仿和學習,不管內部的模組化設計理念,還是模組化安裝和刪除的方式,都是一個理念活生生的落地程式碼,看得見摸得著,甚至我有時候覺得,只要學好ABP其他的框架可學可不學,不學是因為其他的框架從綜合素質來說,目前還沒有看到一個框架在應用層面可以和ABP媲美(.NET領域),沒有誇張地說沒有之一。學是因為不管是任何開源的框架都可以被ABP吸收並蓄,只要我們自己懂得ABP的框架規則,我們的整合是分分鐘的事情。  

  所以,我的結論是,如果你們公司的業務是垂直產品的,可以用ABP沒問題,因為它可以從模組到單體到微服務相容,到微服務做到快速而高效的演化;如果你們公司的業務是專案型的交付,也可以重複利用ABP的模組化來降低開發的成本;如果你們公司是外包型的專案,面對交付各種各樣,ABP一樣可以通過排列組合來快速交付成果。我這裡不是故意誇大,也不是為了宣傳而宣傳,而是真的覺得這玩意兒真的是很方便,誰用誰知道。

ABP難嗎?

  當然ABP入門容易,進階困難,畢竟他是基礎設施,裡面有很深厚的技術深度,如果你只是停留在使用的角度,那麼問題不大,可以很快入門,請相信我,對於有點.NET基礎的人,可能一天就上手了,但是一旦遇到問題或者需要定製,那麼你一定會遇到困難,這個時候你會迷失在碎片化的模組海洋,而且每個模組之間又有網狀般的依賴關係,模組化是非常靈活的,一個解決方案你要分4層還是7層,甚至更多都是很有講究的,因為你要深入理解DDD分層模型和業務需求。所以,當你需要深入學習的時候,你會覺得ABP不容易。

ABP存在的意義?

  問這個問題就好比問我們有了Java,為什麼還要有Spring。ABP存在真正的意義是讓開發人員早點下班,做一個幸福的程式設計師。不要覺得這個要求很低,這非常困難。因為專案從開發到運維沒有一個環節是容易的。專案初期,我們會為了進度加班加點,雖然累但不感覺疲憊,因為專案一直在推進。專案後期,你不斷修改程式碼也可以接受,因為都是你自己寫的程式碼,你知道怎麼修改。專案運維階段,你離職了,新人一邊修改你的程式碼一邊搖頭罵娘,專案開始慢慢變質。隨著一波又一波的新人不斷折騰和累積屎山,你的專案遍體鱗傷、傷痕累累確又無法推倒重來,程式碼開始慢慢腐朽。

  所有的這些都是因為團隊缺乏規範,人員層次不齊,因為你沒有一個行業最佳實踐的地圖。如果說ABP能幫助我們解決以上這些問題,那麼它的價值自然不低。從事.NET開發人員如果您跳槽頻繁的話,我相信你一定接手過很多遺留系統,很多系統從構建的第一天可能有了遺留系統的痕跡,所以如果我們要進行整體遷移,那就是一場噩夢,我幹了10來年的.NET,真的還沒見過成功的案例,要麼團隊能力不夠,要麼成本太高,要麼風險太大……總之,一切問題都在第一天就定了基調。

  除了專案管理和軟體工程方面,在技術方面我們一樣可以從開源的ABP身上學到不少經典程式碼、架構設計、測試規範、最佳實踐。我舉一個簡單的多租戶的例子,如果你有在用多租戶,你一定能對它的多租戶印象深刻,因為你好像感覺不到多租戶的存在,也許這就是多租戶的優雅之處。至於DDD就更不用說了,你跟著它的規範走一遍,你對DDD會有更加深入的瞭解,原來我們以前一直在用的貧血模式開發就覺得自己懂得了DDD。

  ABP的意義真的不是三言兩語能說的完的,畢竟它自己也不斷與時俱進中,它本身從開源身上吸收的能量也在間接展示給我們看。我到現在都覺得自己不能精通ABP,因為它上手容易,精通真的不是那麼容易,因為這意味著你曾經花費很大的時間從0到1重構了一次ABP,否則你怎麼敢說自己精通ABP呢?

ABP會臃腫嗎?

  我經常聽到有些人會說ABP很臃腫,我不知道他是指的哪一方面,如果只是泛泛而談,我感覺是很不專業的,甚至我可以說對方根本沒有深入研究過ABP。是Dll檔案過多,還是啟動很慢,還是吃記憶體,除非你能拿出證據來。

真正的臃腫是什麼?

  模組化是根據業務或者功能的一種拆分,目的是為了重用。拆分多了,你可能學習了會有點困難,因為那麼多塊塊,如果你不夠熟悉,身邊沒有一份說明書,你根本就無從下手。所以,那不是叫臃腫,我們有人會評價樂高很臃腫嗎?相反,我們會覺得樂高很強大,很靈活,可以實現各種可能,除非你缺乏想象力,不要用自己想象力的缺乏來說樂高是臃腫的。

  管理複雜系統必然要求我們對系統進行分類拆分,否則一塊大單體豈不是更加臃腫?我理解的臃腫是,程式碼耦合度非常高,進行二次開發很困難,剪不斷理還亂。另外開發完了,要進行運維修改很困難,甚至出現改到後面,改不動只能重新推倒重來,在舊業務online情況下,新框架要重新開發,變開飛機變換引擎,中間還要做資料庫遷移,對於一般的小公司只是非常危險的,嚴重的會直接宣告專案死刑,因為改不動了,然後新進的人員也只想貼膏藥,公司必然存在離職率高的問題。所以,我的結論是程式碼耦合高是臃腫,二開困難是臃腫,運維低效是臃腫。當然臃腫還有很多內涵,比如編譯緩慢、部署麻煩、效能低下等等。

  我像請教那些說ABP臃腫的人,你到底在說什麼?模組化後,團隊各自編譯會緩慢嗎?模組化後,模組可以單獨部署也可以整合部署是臃腫嗎?你使用ABP跑功能會很慢嗎,所有的模組都在啟動時候就預先載入到我們的記憶體裡了,哪兒慢了?無非多耗費一點記憶體,多用一點空間換取的不是更快的效能是什麼?

  所以,請那些說ABP臃腫的人,不要泛泛而談,請你在臃腫前面加個定語,然後用真實的案例來和大家交流。

 結尾

   因為ABP很優秀,所以我花了很大的精力對ABP進行了深耕,不敢說精通,但是不止一次在深夜探索ABP原始碼,也閱讀了許許多多的文件資料,ABP入門真的很容易,但是如果你一想進一步窺探它的神祕面紗,也許我的這個系列翻譯應該可以幫你更快、更深入地學習它,祝你學有所得,學得快樂。

  如果你也在學習ABP,也有遇到問題需要討論,歡迎你加入我們的Q群:

 

版權問題

  除了《Implementing Domain Drive Design》是免費的,目前《Mastering ABP Framework》屬於收費書籍,原書亞馬遜售價是295.08人民幣,所以本書的翻譯暫時不能做開源處理,請大家理解。另外因為我不知道如何對接版權問題(目前還在瞭解當中),如果有侵犯到版權問題,請立刻和我聯絡刪除。具體版權溝通情況,敬請等待。

相關文章