ABP Framework 研習社經驗總結(6.28-7.2)

ABP Framework 研習社經驗總結(6.28-7.2)

研習社初衷

在翻譯 《實現領域驅動設計》—— 基於 ABP Framework 實現領域驅動設計實用指南 時,因為DDD理論和實踐的寬泛性,不同公司、不同行業、不同項目實現程度不同,覺得有必要為 ABP Framework 開發者提供一個良好的溝通、交流平台。

建群時間:2021.6.23 專註 ABP Framework 技術討論、經驗交流、資料共享!ABP Framework 研習社(QQ群:726299208) 歡迎更多的朋友加入,共同學習、共同成長!

十天回顧

首位成員:忘憂草 讓人難忘!

image

截止到今日(7.2),10天時間,群里共入住182位小夥伴。

image

群里小夥伴,開發年限長,平時不閑聊,遇到感興趣的話題,也會引發刷屏式的討論。

入住大神級人物,@張善友(dotnet跨平台公眾號作者,感謝文章推薦!) @角落的白板(52ABP框架作者)。

很多ABP元老級玩家,@嬌龍(16年開始使用) @野鬼(15年開始用) @黑羽(在0.n版本時開始用)。

或許還潛伏著更多低調的高手,未被發現!

研習社經驗總結(6.28-7.2)

總結和提取 ABP Framework 研習社 大家討論活躍的話題、關注度比較高的內容,供各位學習、交流!

問題1:關於ABP版本

by@失意憶的誓言 15:21:50
現在是研究abp還是abp vnext

發現大家在溝通過程中對於ABP新舊版本存在不統一,所以覺得有必要梳理下ABP的版本。

簡單回顧ABP的發展歷史:

ASP .NET 時代

ASP .NET Boilerplate Project,簡稱ABP,是第一代開源框架。

ASP .NET Zero是基於 ASP .NET Boilerplate 框架的通用(模板)解決方案。付費商業版。

ASP .NET Core 時代

.NET Core 時代來臨,ABP開發者考慮下一代版本的開發,開發代號Abp vNext,為了和第一代開源框架區分,這樣命名很好理解,因為 .Net Core 之前也稱為 .Net vnext 意為:下一代版本。

隨著版本的逐步完善,個人感覺 ABP開發者的平台化戰略越來越清晰,首先有一個統一平台 ABP.IO ,包括:文檔、框架、社區、支援及商業服務,這不僅僅是一個官方網站,我們可以看到官方更大的願景,圍繞 ABP Framework 打造開發者生態,比如:插件商店也在未來的開發計劃當中。

ABP.IO 平台之下,最核心是:開源框架 ABP Framework商業版 ABP Commercial

這與 ASP.NET 時代下的 ASP.NET Boilerplate ProjectASP.NET Zero 相對應。

最新版ABP,準確地應該稱之為 ABP Framwork

ABP歷史小結

  • ASP.NET 時代
    • ASP.NET Boilerplate Project 開源框架
    • ASP.NET Zero 商業版
  • ASP.NET Core 時代
    • Abp vNext 前身
    • ABP.IO 平台
      • ABP Framework 開源框架
      • ABP Commercial 商業版

問題2:關於DDD和三層架構區別

問題:三層架構和DDD究竟有什麼不一樣?

最大的區別在於設計思想的不同:DDD以領域為中心;三層以資料庫為中心。一個是領域驅動;一個是數據驅動。DDD使用領域對象封裝和實現需求的複雜性,領域可以復用;三層架構基於資料庫建模,常規操作為:CRUD。

問題3:ObjectMapper是不是和領域服務有些衝突?

問題 by@黑羽:因為有了自動映射會導致可能不走構造函數,進而導致不走領域模型的構造函數中的業務邏輯?
@黑羽:我現在就是覺得 mapper違背一些規則。一開始覺得還行,後來覺得很不好用。

自動映射常用在領域服務中,接收參數,將 (輸入)數據傳輸對象 轉換為 領域對象返回數據,獲取 領域對象 轉換為 (輸出)數據傳輸對象

接收參數轉換為領域對象,如果創建領域對象時,需要屬性有效性驗證,不推薦使用 自動映射,儘管可以通過設置 自動映射規則,不建議將 業務規則 隱藏在自動映射配置中。

因為數據傳輸對象是一個POCO對象,所以在將 實體 自動映射為 (輸出)數據傳輸對象時,可以放心自動映射。

對象自動映射,不是實施領域驅動必須技術,當做是一個工具,酌情使用即可!

更多最佳實踐可以參看:《基於ABP Framework 實現領域驅動設計》#構件/數據傳輸對象/對象映射 章節

問題4:求 IssueTracking 項目源碼

Hager²º20 08:22:55
@iEricLee 群主早上好,看了你的文章,品質很高呀。提到的項目IssueTracking,有沒有可能給分享一份,具體的學習學習。

失意憶的誓言 08:28:15
那有沒有最佳實現方式的demo可以分享一下呢,麻雀雖小五臟俱全的那種

@Hager²º20 如果能有一個示例項目結合文章細品就更好了
DDD這玩意兒,就是一種設計思想,可具體落地時有時候就感覺無從下手。

這裡統一做一個回復:IssueTracking 是一個虛擬項目,主要用來模擬業務場景和需求的演變,目前沒有與文章中相對應的單獨項目。

如果大家想研究DDD落地後的項目示例,其實在 ABP Framework 源碼中提供很多應用模組,這些應用模組都是遵循DDD最佳實踐和原則,挑自己感興趣的模組研究即可。

推薦最新發布的 CMS-Kit 模組傳送門:Github 源碼

問題5:關於應用層分層問題

問題:by@聽她說。 它後面說可以多個application層來對應多個不同的業務場景 你能做個案例出來不😁😁

在解決方案中可以添加 Admin.Application Public.Application Common.Application 應用層,共用領域層。應用層分別對應管理後台業務邏輯、前台業務邏輯、公共業務邏輯的處理,對應用層進行拆分可以讓項目結構更加清晰、可控。

由此也帶來開發商的便利,比如因為對後台管理單獨分層許可權控制更加方便。

另外還可以按照不同客戶端來分層,比如:Mobile.Application WeChat.Application Tablet.Application 來拆分應用層,處理不用客戶端的業務需求,所以應用層在分層上可以靈活的,只需要遵循DDD基本原則都是DDD最佳實踐!

問題6:關於自定義身份驗證

by@ 聽她說。 17:45:10
大家好,使用 abp vnext ,ids4,我想給用戶添加一個pin密碼然後使用pin密碼登錄,獲取accesstoken,這樣能實現嗎?

解決方式:

by @Dr.Yao 18:57:43
闊以的。看 IExtensionGrantValidator

問題7:業務編碼是在領域模型中生成,還是在應用服務?

by @野鬼:生成業務編碼這個。不屬於領域服務。在我的概念裡面 它是屬於 業務服務,ApplicatonService裡面,我創建實體。
你必須傳一個 單號給我。這個單號是由應用產生的。
我要一個訂單號。這訂單號怎麼生成。不是我領域的事。是你 Application負責的事。
但我領域層會校驗這個 單號的唯一性、校驗單號的規則 。是否符合我的邏輯。
單號。早就生成好了。而且買現成的。

問題8:關於 ABP Framework的學習建議

問題 by@草葉睡蜢 16:52:59
對於官方文檔,到底要怎麼看,先看啥後看啥,有沒有一個導航圖或者思維導圖。
我把官方文檔下載下來,都是按字母排序的,根本分不清從哪裡開始著手。
有經驗的給分享一下學習路徑。

學習路徑建議:

  1. 先看快速入門的教程 Todo 、BookStore 把項目基礎功能運行起來,理解基本流程和架構。
  2. 然後再逐個框架功能擊破。模組眾多可以挑自己能用到或感興趣的分析,最終會發現所有模組其實都有統一的實現思路。
  3. 最後拿下架構層面內容:領域驅動、微服務、多租戶。

電子書下載

個人認為 ABP Framework 技術棧新而全,是.NET開發者的「屠龍刀」、「寶藏庫」。從程式碼、項目、解決方案、技術架構,都有優雅的設計和實現,對於初中級.NET程式設計師,想要進一步提升自己的編碼功力設計思想架構經驗,學習和應用該框架,絕對是最佳途徑之一。

回顧系列文章:

為了大家方便閱讀,整理成了電子書《基於ABP Framework 實現領域驅動設計》中文完整版_v1.0_iEricLee譯 點擊下載

dotNET兄弟會-公眾號

專註.Net開源技術及跨平台開發!致力於構建完善的.Net開放技術文庫!為.Net愛好者提供學習交流家園!

image