ABP Framework 研習社經驗總結(6.28-7.2)
- 2021 年 7 月 2 日
- 筆記
- .NET Core, ABP Framework, DDD
ABP Framework 研習社經驗總結(6.28-7.2)
研習社初衷
在翻譯 《實現領域驅動設計》—— 基於 ABP Framework 實現領域驅動設計實用指南 時,因為DDD理論和實踐的寬泛性,不同公司、不同行業、不同項目實現程度不同,覺得有必要為 ABP Framework 開發者提供一個良好的溝通、交流平台。
建群時間:2021.6.23
專註 ABP Framework 技術討論、經驗交流、資料共享!ABP Framework 研習社(QQ群:726299208) 歡迎更多的朋友加入,共同學習、共同成長!
十天回顧
首位成員:忘憂草
讓人難忘!
截止到今日(7.2),10天時間,群里共入住182位
小夥伴。
群里小夥伴,開發年限長,平時不閑聊,遇到感興趣的話題,也會引發刷屏式的討論。
入住大神級人物,@張善友
(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 Project 和 ASP.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
對於官方文檔,到底要怎麼看,先看啥後看啥,有沒有一個導航圖或者思維導圖。
我把官方文檔下載下來,都是按字母排序的,根本分不清從哪裡開始著手。
有經驗的給分享一下學習路徑。
學習路徑建議:
- 先看快速入門的教程 Todo 、BookStore 把項目基礎功能運行起來,理解基本流程和架構。
- 然後再逐個框架功能擊破。模組眾多可以挑自己能用到或感興趣的分析,最終會發現所有模組其實都有統一的實現思路。
- 最後拿下架構層面內容:領域驅動、微服務、多租戶。
電子書下載
個人認為 ABP Framework 技術棧新而全,是.NET開發者的「屠龍刀」、「寶藏庫」。從程式碼、項目、解決方案、技術架構,都有優雅的設計和實現,對於初中級.NET程式設計師,想要進一步提升自己的編碼功力、設計思想、架構經驗,學習和應用該框架,絕對是最佳途徑之一。
回顧系列文章:
- 基於ABP落地領域驅動設計-01.全景圖
- 基於ABP落地領域驅動設計-02.聚合和聚合根的最佳實踐和原則
- 基於ABP落地領域驅動設計-03.倉儲和規約最佳實踐和原則
- 基於ABP落地領域驅動設計-04.領域服務和應用服務的最佳實踐和原則
- 基於ABP落地領域驅動設計-05.實體創建和更新最佳實踐
- 基於ABP落地領域驅動設計-06.正確區分領域邏輯和應用邏輯
為了大家方便閱讀,整理成了電子書《基於ABP Framework 實現領域驅動設計》中文完整版_v1.0_iEricLee譯 點擊下載。
dotNET兄弟會-公眾號
專註.Net開源技術及跨平台開發!致力於構建完善的.Net開放技術文庫!為.Net愛好者提供學習交流家園!