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)?歡迎更多的朋友加入,共同學習、共同成長!
十天回顧
首位成員:忘憂草?讓人難忘!
截止到今日(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 項目源碼
Hager2o20 08:22:55 @iEricLee 群主早上好,看了你的文章,質量很高呀。提到的項目IssueTracking,有沒有可能給分享一份,具體的學習學習。
失意憶的誓言 08:28:15 那有沒有最佳實現方式的demo可以分享一下呢,麻雀雖小五臟俱全的那種
@Hager2o20 如果能有一個示例項目結合文章細品就更好了 DDD這玩意兒,就是一種設計思想,可具體落地時有時候就感覺無從下手。
這里統一做一個回復:IssueTracking?是一個虛擬項目,主要用來模擬業務場景和需求的演變,目前沒有與文章中相對應的單獨項目。
如果大家想研究DDD落地后的項目示例,其實在 ABP Framework 源碼中提供很多應用模塊,這些應用模塊都是遵循DDD最佳實踐和原則,挑自己感興趣的模塊研究即可。
推薦最新發布的?CMS-Kit 模塊:傳送門:Github 源碼[1]?。
問題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落地領域驅動設計-01.全景圖???基于ABP落地領域驅動設計-02.聚合和聚合根的最佳實踐和原則???基于ABP落地領域驅動設計-03.倉儲和規約最佳實踐和原則???基于ABP落地領域驅動設計-04.領域服務和應用服務的最佳實踐和原則???基于ABP落地領域驅動設計-05.實體創建和更新最佳實踐? ?基于ABP落地領域驅動設計-06.正確區分領域邏輯和應用邏輯
為了大家方便閱讀,整理成了電子書《基于ABP Framework 實現領域驅動設計》中文完整版_v1.0_iEricLee譯?
請入群:ABP Framework 研習社(QQ群:726299208)在共享文件中下載。
References
[1]?傳送門:Github 源碼:?https://github.com/abpframework/abp/tree/dev/modules/cms-kit
總結
以上是生活随笔為你收集整理的ABP Framework 研习社经验总结(6.28-7.2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用啥Selenium?! .NET程序员
- 下一篇: 一篇万字长文读懂微软PDB、Source