成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DDD實戰中如何避免過度設計

開發 前端
DDD即領域驅動設計,是一種建模方法論,強調通過分析建模、再設計實現,而不是數據庫表驅動。

[[400603]]

DDD即領域驅動設計,是一種建模方法論,強調通過分析建模、再設計實現,而不是數據庫表驅動。

DDD解決的是核心復雜業務設計,特別強調的是“核心”與”復雜”,DDD只適用于業務系統。

DDD簡化業務系統的實現,讓業務邏輯高度內聚,聚合之間通過聚合根ID引用與領域事件松耦合,正是高內聚低耦合能讓項目代碼隨著業務需求的不斷迭代保持整潔。

通過四層架構設計/六邊形架構設計實現與基礎設施、框架的解偶。

DDD也解決了微服務的拆分問題。

DDD解決的是業務問題,通過事件風暴識別領域事件、識別限界上下文、識別問題子域、聚合,再對聚合建模。并非解決數據查詢問題、數據分析問題。

前面我們了解了如何通過CQRS解決讀寫分離問題,然而……

在實戰DDD過程中我們總會遇到一些即不適合領域建模也不能簡單通過CQRS解決的問題,如為前端提供住址、性別等選項的接口如何實現、用戶標簽功能如何設計、評價功能如何設計……

對于這些看似簡單的問題,我們要考慮的是如何避免過度設計,保持架構的簡潔以及擴展。

為前端提供選項有非常多的場景。有些選項是個枚舉類型,如性別、訂單類型;有些選項需要支持增加或刪除,如商品分類,雖然實體需要通過ID引用它,但卻又不適合作為實體存在。

無論是枚舉類型的選項,還是通過ID引用卻又不適合作為實體存在的選項,都應該作為值對象。可以直接在應用層讀寫存儲/緩存中間件,如mysql、es、redis。

下文中會出現的領域(業務)名詞:達人:網紅、紅人,有粉絲群體的個人、有一定影響力的個人;OTO探店:線上報名線下探店,線上推廣(主要服務美食點,為商家推廣線下店鋪);

我們項目中有需要實現為達人打標簽的需求,在接到這個需求時,我們首先做的就是分析標簽能產生什么樣的價值,再通過事件風暴看是否能分析出領域事件。

結合項目業務分析,達人標簽在我們項目中發揮的價值其實就是用于興趣匹配推送,在OTO探店業務場景下,興趣匹配可以理解為根據達人喜好的口味給達人推送相關店鋪的訂單。

分析到這里我們就清楚了標簽功能要做的就是數據分析還有算法推薦,除此之外,標簽沒有任何領域事件(行為、業務動作),標簽不存在領域上下文,所以不應該過度設計。

另外,為達人打標簽/達人自己打標簽,那么標簽就是達人的值對象,與達人的性別、年齡、住址等屬性都是達人的值對象。達人可以添加標簽或者刪除標簽。

所以最終我們實現的標簽功能就只是在達人的聚合根上添加一個標簽值對象。給達人聚合根添加修改標簽的方法。

另外我們需要為前端提供標簽選項,支持管理員添加或刪除標簽,與實現普通選項一樣,我們單獨在達人聚合下提供一個應用層的LableService,直接操作數據庫增/刪標簽。

標簽表的存在只是提供標簽選項,達人給自己打標簽只能從系統提供的標簽中選擇,標簽相當于只是選項。因此達人的標簽值對象并非存標簽的id,而是直接存標簽的名稱。

當標簽選項刪除時我們不應該為所有打了該標簽的用戶默認刪除他的標簽,這實際是不允許的,就像我們不能隨便改用戶的性別、住址一樣。

只有在達人更新標簽時不提供已經刪除的選項,讓達人自己選擇新的標簽更新,更新后舊的標簽全部被替換也就達到刪除的目的。

除選項、標簽外,我們要做的還有一個評價功能。

根據事件風暴我們分析出以下領域事件: a、達人完成任務后商家可評價達人(每個任務只允許評價一次) b、商家評價達人后更新達人的得分(如內容質量得分) "商家評價達人"涉及到任務、達人、商家三個維度,達人可以查看商家給自己的評價,商家也可以查看自己給哪些達人寫了評價,并且都能查看任務關聯的評價。

顯然,無論是把評價功能放到任務上下文還是達人上下文、商家上下文,都不合理。因此我們為評價劃分出評價上下文,識別出評價問題子域。 商家評價達人作為評價上下文的一個聚合,后期可能還會實現支持達人評價店鋪,而達人評價店鋪又是一個評價上下文的聚合,評價上下文存在多個聚合。

我們在實戰DDD過程中,在實現前端選項、標簽功能、評價功能過程中也做了詳細的分析再設計,目的都是避免過度設計。

不斷摸索……

 

責任編輯:武曉燕 來源: Java藝術
相關推薦

2024-07-01 08:00:00

2011-06-20 14:44:49

網站優化

2019-02-22 09:05:04

SwapNVMe設備

2024-09-25 08:00:00

領域驅動設計軟件開發

2025-01-26 10:10:30

2023-02-08 17:00:07

IF 語句技巧代碼

2022-04-19 20:51:20

軟件開發耦合代碼

2023-02-20 14:44:22

DDD領域模型

2023-05-09 09:04:29

代碼設計語言

2023-07-07 08:53:39

倉儲模式快照模式

2020-09-02 08:12:05

CodeDDD代碼

2021-09-08 09:22:23

領域驅動設計

2022-02-10 10:28:34

數據庫方案實踐

2023-02-15 13:50:58

DDD戰略設計

2014-09-26 10:00:25

驅動設計DDD領域

2024-05-31 12:59:03

2022-05-26 09:51:50

JavaScrip內存泄漏

2015-07-30 10:12:32

JavaNullAssert

2023-01-30 07:55:44

代碼過度設計

2022-06-24 11:27:26

開發程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级一级国产 | 亚洲精品国产成人 | 亚洲xx在线 | 日韩精品一区二区三区中文字幕 | 亚洲日韩第一页 | 精品中文字幕久久 | 亚洲二区视频 | 亚洲不卡在线观看 | 国产高清在线精品 | 国产亚洲区 | 一级黄色夫妻生活 | 1区2区视频 | 91精品在线播放 | 精品在线一区二区 | 亚洲欧美日本在线 | 天天操天天射综合 | 欧美日韩中文国产一区发布 | 免费激情 | 玖玖玖在线观看 | 国产精品国产馆在线真实露脸 | 91久久国产综合久久 | 一区二区日韩精品 | 日韩成人一区 | 在线免费观看视频你懂的 | 国产精品久久久久久久久免费软件 | 国产欧美精品一区二区色综合朱莉 | 亚洲一区视频在线 | 69精品久久久久久 | 999久久久| 天天看天天摸天天操 | 日日日日日日bbbbb视频 | 国产高清精品一区二区三区 | 九九免费 | 久久精品91久久久久久再现 | 免费一区| 国产黄色精品在线观看 | 亚洲精品一二区 | 日韩欧美在线观看视频 | 成人精品一区二区三区中文字幕 | 午夜国产 | 99视频免费 |