行為驅動開發(BDD)如何與領域驅動設計(DDD)結合?
How does Behaviour Driven Development (BDD) work with Domain Driven Design (DDD) - Stack Overflow試圖解開其中的問題。
BDD的定義:Given在某種場景下 When發生了事件 Then導致了什麼結果(簡稱Given, When, Then)。
(banq注:我曾經把四色原型總結為:某個角色對某個事情做了某個動作,導致了什麼結果。這兩種描述幾乎相同,四色原型側重動作活動,BDD側重事件,事件和動作其實非常類似。)
在StackOverflow這篇回答中,首先肯定BDD並不是一次性產生成熟的領域模型,BDD是從三個角度來看待需求: 知道的the known, 能夠知道的the knowable 和不知道的 the unknowable.
對於“知道的”,因為比較簡單,大家都知道,就無需各種場景描述,比如談到日誌,大家都能明白日誌是什麼,怎麼做日誌。
對於“能夠知道的”,BDD擅長於此,透過使用者故事來表達,並且以Given, When, Then方式來表達,這實際是使用scenarios場景來表達領域模型(banq注:比較類似DCI分析)
對於“不知道的”,我們透過BDD這樣敏捷迭代不斷挖掘深入,能夠不斷發現深層次的領域模型,隱式模型顯式化。(見複雜模型的迴圈化)
當我們結合BDD和DDD時,我們使用BDD來實現領域模型中和場景有關的那些部分。當然在一個大型專案中,如果我們已經有一些成熟大的領域模型,我們也可以使用BDD的Feature Injection,特徵是提供了一種讓使用者能夠使用程式系統提供能力的途徑,一般這是由UI介面工程師來完成,所謂能力實際是一種服務,服務必須透過介面透過類似MVC方式來實現,這樣使用者操作介面才能實現我們提供給它的服務能力,當然這個介面可以是網頁也可能是移動頁面。
(banq注:我經常在一些網站網頁上使用的按鈕功能,轉到其手機頁面上就找不到了,比如新浪微博有那麼多種客戶端,但是更新都不是同步的,造成客戶端使用體驗完全不同,這實際沒有重視Feature一種體現)
相關文章
- DDD領域驅動設計:領域事件事件
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計
- DDD-領域驅動設計示例
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- 領域驅動設計與敏捷開發敏捷
- 領域驅動設計 (DDD) 簡介 - jannikwempe
- 領域驅動設計(DDD)入門&概要
- 領域驅動設計DDD應用心得
- 前端開發-領域驅動設計前端
- ABP與DDD領域驅動關係
- 領域驅動設計(DDD)實踐之路(一)
- 領域驅動設計(DDD)高手養成記
- 領域驅動設計與模型驅動設計的關係模型
- Java開發架構篇《初識領域驅動設計DDD落地》Java架構
- Java開發架構篇:初識領域驅動設計DDD落地Java架構
- dayatang/dddlib:DDD領域驅動設計庫
- 領域驅動設計(DDD:Domain-Driven Design)AI
- 領域模型驅動設計(DDD)之模型提煉模型
- DDD領域驅動設計總結和C#程式碼示例C#
- 理解領域驅動設計
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- 領域驅動設計(DDD:Domain-Driven Design)轉AI
- DDD領域驅動設計初探(5):AutoMapper使用APP
- DDD領域驅動設計初探(7):Web層的搭建Web
- DDD(Domain Driver Designer) 領域驅動設計簡介AI
- 領域驅動設計整合與架構架構
- 問題驅動設計與領域驅動設計的區別 - abdullin
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- 去哪兒網領域驅動設計(DDD)實踐之路
- DDD領域驅動設計初探(3):倉儲Repository(下)
- DDD領域驅動設計初探(2):倉儲Repository(上)
- 實戰DDD(Domain-Driven Design領域驅動設計)AI
- 用 F#和EventStore實現DDD領域驅動設計
- 分享我的:領域驅動設計(DDD)學習成果精簡總結
- 領域驅動設計簡介
- 實現領域驅動設計