ABP Framework 研習社經驗總結(6.28-7.2):總結建群初衷,近期群裡讨論的八個活躍問題,及電子書下載下傳!
目錄
- ABP Framework 研習社經驗總結(6.28-7.2)
- 研習社初衷
- 十天回顧
- 研習社經驗總結(6.28-7.2)
- 問題1:關于ABP版本
- 問題2:關于DDD和三層架構差別
- 問題3:ObjectMapper是不是和領域服務有些沖突?
- 問題4:求 IssueTracking 項目源碼
- 問題5:關于應用層分層問題
- 問題6:關于自定義身份驗證
- 問題7:業務編碼是在領域模型中生成,還是在應用服務?
- 問題8:關于 ABP Framework的學習建議
- 電子書下載下傳
- dotNET兄弟會-公衆号
在翻譯 《實作領域驅動設計》—— 基于 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
版本時開始用)。
或許還潛伏着更多低調的高手,未被發現!
總結和提取 ABP Framework 研習社 大家讨論活躍的話題、關注度比較高的内容,供各位學習、交流!
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 商業版
問題:三層架構和DDD究竟有什麼不一樣?
最大的差別在于設計思想的不同:DDD以領域為中心;三層以資料庫為中心。一個是領域驅動;一個是資料驅動。DDD使用領域對象封裝和實作需求的複雜性,領域可以複用;三層架構基于資料庫模組化,正常操作為:CRUD。
問題 by@黑羽:因為有了自動映射會導緻可能不走構造函數,進而導緻不走領域模型的構造函數中的業務邏輯?
@黑羽:我現在就是覺得 mapper違背一些規則。一開始覺得還行,後來覺得很不好用。
自動映射常用在領域服務中,接收參數,将 (輸入)資料傳輸對象 轉換為 領域對象;傳回資料,擷取 領域對象 轉換為 (輸出)資料傳輸對象 。
接收參數轉換為領域對象,如果建立領域對象時,需要屬性有效性驗證,不推薦使用 自動映射,盡管可以通過設定 自動映射規則,不建議将 業務規則 隐藏在自動映射配置中。
因為資料傳輸對象是一個POCO對象,是以在将 實體 自動映射為 (輸出)資料傳輸對象時,可以放心自動映射。
對象自動映射,不是實施領域驅動必須技術,當做是一個工具,酌情使用即可!
更多最佳實踐可以參看: 《基于ABP Framework 實作領域驅動設計》#構件/資料傳輸對象/對象映射
章節
Hager²º20 08:22:55
@iEricLee 群主早上好,看了你的文章,品質很高呀。提到的項目IssueTracking,有沒有可能給分享一份,具體的學習學習。
失意憶的誓言 08:28:15
那有沒有最佳實作方式的demo可以分享一下呢,麻雀雖小五髒俱全的那種
@Hager²º20 如果能有一個示例項目結合文章細品就更好了
DDD這玩意兒,就是一種設計思想,可具體落地時有時候就感覺無從下手。
這裡統一做一個回複:
IssueTracking
是一個虛拟項目,主要用來模拟業務場景和需求的演變,目前沒有與文章中相對應的單獨項目。
如果大家想研究DDD落地後的項目示例,其實在 ABP Framework 源碼中提供很多應用子產品,這些應用子產品都是遵循DDD最佳實踐和原則,挑自己感興趣的子產品研究即可。
推薦最新釋出的 CMS-Kit 子產品:傳送門:Github 源碼 。
問題:by@聽她說。 它後面說可以多個application層來對應多個不同的業務場景 你能做個案例出來不😁😁
在解決方案中可以添加
Admin.Application
Public.Application
Common.Application
應用層,共用領域層。應用層分别對應管理背景業務邏輯、前台業務邏輯、公共業務邏輯的處理,對應用層進行拆分可以讓項目結構更加清晰、可控。
由此也帶來開發商的便利,比如因為對背景管理單獨分層權限控制更加友善。
另外還可以按照不同用戶端來分層,比如:
Mobile.Application
WeChat.Application
Tablet.Application
來拆分應用層,處理不用用戶端的業務需求,是以應用層在分層上可以靈活的,隻需要遵循DDD基本原則都是DDD最佳實踐!
by@ 聽她說。 17:45:10
大家好,使用 abp vnext ,ids4,我想給使用者添加一個pin密碼然後使用pin密碼登入,擷取accesstoken,這樣能實作嗎?
解決方式:
by @Dr.Yao 18:57:43
闊以的。看
。
IExtensionGrantValidator
by @野鬼:生成業務編碼這個。不屬于領域服務。在我的概念裡面 它是屬于 業務服務,ApplicatonService裡面,我建立實體。
你必須傳一個 單号給我。這個單号是由應用産生的。
我要一個訂單号。這訂單号怎麼生成。不是我領域的事。是你 Application負責的事。
但我領域層會校驗這個 單号的唯一性、校驗單号的規則 。是否符合我的邏輯。
單号。早就生成好了。而且買現成的。
問題 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譯 點選下載下傳。
專注.Net開源技術及跨平台開發!緻力于建構完善的.Net開放技術文庫!為.Net愛好者提供學習交流家園!
記錄技術修行中的反思與感悟,以碼傳心,以軟制道,知行合一!