ABP Framework 研习社经验总结(6.28-7.2)
ABP Framework 研習社經(jīng)驗總結(jié)(6.28-7.2)
研習社初衷
在翻譯?《實現(xiàn)領(lǐng)域驅(qū)動設(shè)計》—— 基于 ABP Framework 實現(xiàn)領(lǐng)域驅(qū)動設(shè)計實用指南?時,因為DDD理論和實踐的寬泛性,不同公司、不同行業(yè)、不同項目實現(xiàn)程度不同,覺得有必要為 ABP Framework 開發(fā)者提供一個良好的溝通、交流平臺。
建群時間:2021.6.23?專注?ABP Framework?技術(shù)討論、經(jīng)驗交流、資料共享!ABP Framework 研習社(QQ群:726299208)?歡迎更多的朋友加入,共同學(xué)習、共同成長!
十天回顧
首位成員:忘憂草?讓人難忘!
截止到今日(7.2),10天時間,群里共入住182位小伙伴。
群里小伙伴,開發(fā)年限長,平時不閑聊,遇到感興趣的話題,也會引發(fā)刷屏式的討論。
入住大神,@張善友(dotnet跨平臺公眾號作者,感謝文章推薦!)?@角落的白板(52ABP框架作者)。
ABP元老級玩家,@嬌龍(16年開始使用)?@野鬼(15年開始用)?@黑羽(在0.n版本時開始用)。
或許還潛伏著更多低調(diào)的高手,未被發(fā)現(xiàn)!
研習社經(jīng)驗總結(jié)(6.28-7.2)
總結(jié)和提取?ABP Framework 研習社?大家討論活躍的話題、關(guān)注度比較高的內(nèi)容,供各位學(xué)習、交流!
問題1:關(guān)于ABP版本
by@失意憶的誓言 15:21:50 現(xiàn)在是研究abp還是abp vnext
發(fā)現(xiàn)大家在溝通過程中對于ABP新舊版本存在不統(tǒng)一,所以覺得有必要梳理下ABP的版本。
簡單回顧ABP的發(fā)展歷史:
ASP .NET 時代
ASP .NET Boilerplate Project,簡稱ABP,是第一代開源框架。
ASP .NET Zero是基于 ASP .NET Boilerplate 框架的通用(模板)解決方案。付費商業(yè)版。
ASP .NET Core 時代
.NET Core 時代來臨,ABP開發(fā)者考慮下一代版本的開發(fā),開發(fā)代號Abp vNext,為了和第一代開源框架區(qū)分,這樣命名很好理解,因為?.Net Core?之前也稱為?.Net vnext?意為:下一代版本。
隨著版本的逐步完善,個人感覺 ABP開發(fā)者的平臺化戰(zhàn)略越來越清晰,首先有一個統(tǒng)一平臺?ABP.IO?,包括:文檔、框架、社區(qū)、支持及商業(yè)服務(wù),這不僅僅是一個官方網(wǎng)站,我們可以看到官方更大的愿景,圍繞 ABP Framework 打造開發(fā)者生態(tài),比如:插件商店也在未來的開發(fā)計劃當中。
ABP.IO 平臺之下,最核心是:開源框架 ABP Framework?和?商業(yè)版 ABP Commercial?。
這與 ASP.NET 時代下的?ASP.NET Boilerplate Project?和?ASP.NET Zero?相對應(yīng)。
最新版ABP,準確地應(yīng)該稱之為?ABP Framwork?。
ABP歷史小結(jié)
?ASP.NET 時代
?ASP.NET Boilerplate Project 開源框架?ASP.NET Zero 商業(yè)版
?ASP.NET Core 時代
?Abp vNext 前身?ABP.IO 平臺
?ABP Framework 開源框架?ABP Commercial 商業(yè)版
問題2:關(guān)于DDD和三層架構(gòu)區(qū)別
問題:三層架構(gòu)和DDD究竟有什么不一樣?
最大的區(qū)別在于設(shè)計思想的不同:DDD以領(lǐng)域為中心;三層以數(shù)據(jù)庫為中心。一個是領(lǐng)域驅(qū)動;一個是數(shù)據(jù)驅(qū)動。DDD使用領(lǐng)域?qū)ο蠓庋b和實現(xiàn)需求的復(fù)雜性,領(lǐng)域可以復(fù)用;三層架構(gòu)基于數(shù)據(jù)庫建模,常規(guī)操作為:CRUD。
問題3:ObjectMapper是不是和領(lǐng)域服務(wù)有些沖突?
問題 by@黑羽:因為有了自動映射會導(dǎo)致可能不走構(gòu)造函數(shù),進而導(dǎo)致不走領(lǐng)域模型的構(gòu)造函數(shù)中的業(yè)務(wù)邏輯?@黑羽:我現(xiàn)在就是覺得 mapper違背一些規(guī)則。一開始覺得還行,后來覺得很不好用。
自動映射常用在領(lǐng)域服務(wù)中,接收參數(shù),將?(輸入)數(shù)據(jù)傳輸對象?轉(zhuǎn)換為?領(lǐng)域?qū)ο?/strong>;返回數(shù)據(jù),獲取?領(lǐng)域?qū)ο?/strong>?轉(zhuǎn)換為?(輸出)數(shù)據(jù)傳輸對象?。
接收參數(shù)轉(zhuǎn)換為領(lǐng)域?qū)ο?/strong>,如果創(chuàng)建領(lǐng)域?qū)ο髸r,需要屬性有效性驗證,不推薦使用?自動映射,盡管可以通過設(shè)置 自動映射規(guī)則,不建議將 業(yè)務(wù)規(guī)則 隱藏在自動映射配置中。
因為數(shù)據(jù)傳輸對象是一個POCO對象,所以在將 實體 自動映射為 (輸出)數(shù)據(jù)傳輸對象時,可以放心自動映射。
對象自動映射,不是實施領(lǐng)域驅(qū)動必須技術(shù),當做是一個工具,酌情使用即可!
更多最佳實踐可以參看:《基于ABP Framework 實現(xiàn)領(lǐng)域驅(qū)動設(shè)計》#構(gòu)件/數(shù)據(jù)傳輸對象/對象映射?章節(jié)
問題4:求 IssueTracking 項目源碼
Hager2o20 08:22:55 @iEricLee 群主早上好,看了你的文章,質(zhì)量很高呀。提到的項目IssueTracking,有沒有可能給分享一份,具體的學(xué)習學(xué)習。
失意憶的誓言 08:28:15 那有沒有最佳實現(xiàn)方式的demo可以分享一下呢,麻雀雖小五臟俱全的那種
@Hager2o20 如果能有一個示例項目結(jié)合文章細品就更好了 DDD這玩意兒,就是一種設(shè)計思想,可具體落地時有時候就感覺無從下手。
這里統(tǒng)一做一個回復(fù):IssueTracking?是一個虛擬項目,主要用來模擬業(yè)務(wù)場景和需求的演變,目前沒有與文章中相對應(yīng)的單獨項目。
如果大家想研究DDD落地后的項目示例,其實在 ABP Framework 源碼中提供很多應(yīng)用模塊,這些應(yīng)用模塊都是遵循DDD最佳實踐和原則,挑自己感興趣的模塊研究即可。
推薦最新發(fā)布的?CMS-Kit 模塊:傳送門:Github 源碼[1]?。
問題5:關(guān)于應(yīng)用層分層問題
問題:by@聽她說。它后面說可以多個application層來對應(yīng)多個不同的業(yè)務(wù)場景 你能做個案例出來不????????
在解決方案中可以添加?Admin.Application?Public.Application?Common.Application?應(yīng)用層,共用領(lǐng)域?qū)?/strong>。應(yīng)用層分別對應(yīng)管理后臺業(yè)務(wù)邏輯、前臺業(yè)務(wù)邏輯、公共業(yè)務(wù)邏輯的處理,對應(yīng)用層進行拆分可以讓項目結(jié)構(gòu)更加清晰、可控。
由此也帶來開發(fā)商的便利,比如因為對后臺管理單獨分層權(quán)限控制更加方便。
另外還可以按照不同客戶端來分層,比如:Mobile.Application?WeChat.Application?Tablet.Application?來拆分應(yīng)用層,處理不用客戶端的業(yè)務(wù)需求,所以應(yīng)用層在分層上可以靈活的,只需要遵循DDD基本原則都是DDD最佳實踐!
問題6:關(guān)于自定義身份驗證
by@ 聽她說。17:45:10 大家好,使用 abp vnext ,ids4,我想給用戶添加一個pin密碼然后使用pin密碼登錄,獲取accesstoken,這樣能實現(xiàn)嗎?
解決方式:
by @Dr.Yao 18:57:43 闊以的。看?IExtensionGrantValidator?。
問題7:業(yè)務(wù)編碼是在領(lǐng)域模型中生成,還是在應(yīng)用服務(wù)?
by @野鬼:生成業(yè)務(wù)編碼這個。不屬于領(lǐng)域服務(wù)。在我的概念里面 它是屬于 業(yè)務(wù)服務(wù),ApplicatonService里面,我創(chuàng)建實體。你必須傳一個 單號給我。這個單號是由應(yīng)用產(chǎn)生的。我要一個訂單號。這訂單號怎么生成。不是我領(lǐng)域的事。是你 Application負責的事。但我領(lǐng)域?qū)訒r炦@個 單號的唯一性、校驗單號的規(guī)則 。是否符合我的邏輯。單號。早就生成好了。而且買現(xiàn)成的
問題8:關(guān)于 ABP Framework的學(xué)習建議
問題 by@草葉睡蜢 16:52:59 對于官方文檔,到底要怎么看,先看啥后看啥,有沒有一個導(dǎo)航圖或者思維導(dǎo)圖。我把官方文檔下載下來,都是按字母排序的,根本分不清從哪里開始著手。有經(jīng)驗的給分享一下學(xué)習路徑。
學(xué)習路徑建議:
1.先看快速入門的教程 Todo 、BookStore 把項目基礎(chǔ)功能運行起來,理解基本流程和架構(gòu)。2.然后再逐個框架功能擊破。模塊眾多可以挑自己能用到或感興趣的分析,最終會發(fā)現(xiàn)所有模塊其實都有統(tǒng)一的實現(xiàn)思路。3.最后拿下架構(gòu)層面內(nèi)容:領(lǐng)域驅(qū)動、微服務(wù)、多租戶。
電子書下載
個人認為 ABP Framework 技術(shù)棧新而全,是.NET開發(fā)者的“屠龍刀”、“寶藏庫”。從代碼、項目、解決方案、技術(shù)架構(gòu),都有優(yōu)雅的設(shè)計和實現(xiàn),對于初中級.NET程序員,想要進一步提升自己的編碼功力、設(shè)計思想、架構(gòu)經(jīng)驗,學(xué)習和應(yīng)用該框架,絕對是最佳途徑之一。
回顧系列文章:
? ?基于ABP落地領(lǐng)域驅(qū)動設(shè)計-01.全景圖???基于ABP落地領(lǐng)域驅(qū)動設(shè)計-02.聚合和聚合根的最佳實踐和原則???基于ABP落地領(lǐng)域驅(qū)動設(shè)計-03.倉儲和規(guī)約最佳實踐和原則???基于ABP落地領(lǐng)域驅(qū)動設(shè)計-04.領(lǐng)域服務(wù)和應(yīng)用服務(wù)的最佳實踐和原則???基于ABP落地領(lǐng)域驅(qū)動設(shè)計-05.實體創(chuàng)建和更新最佳實踐? ?基于ABP落地領(lǐng)域驅(qū)動設(shè)計-06.正確區(qū)分領(lǐng)域邏輯和應(yīng)用邏輯
為了大家方便閱讀,整理成了電子書《基于ABP Framework 實現(xiàn)領(lǐng)域驅(qū)動設(shè)計》中文完整版_v1.0_iEricLee譯?
請入群:ABP Framework 研習社(QQ群:726299208)在共享文件中下載。
References
[1]?傳送門:Github 源碼:?https://github.com/abpframework/abp/tree/dev/modules/cms-kit
總結(jié)
以上是生活随笔為你收集整理的ABP Framework 研习社经验总结(6.28-7.2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用啥Selenium?! .NET程序员
- 下一篇: 一篇万字长文读懂微软PDB、Source