實際上,本文的正確標題應該是《如何通過DDD構建解決快速出行問題的領域模型》。快速出行才是要解決的問題,汽車只是其中一種解決方案或者落地的實現而已。嚴格區分問題域與解決方案域是實施DDD的老大難問題了。需要死磕這個問題的讀者可以參考ThoughtWorks洞見的這篇文章《當Subdomain遇見Bounded Context》,這裡不展開討論。本文的目的是要展現一個在非IT領域運用DDD構建領域模型的例子。
先出要解決的業務領域問題:我要實現城市內快速出行。
就只有一句話,沒有細節信息,感覺什麼都做不了。但往往需求都是這樣的簡單粗暴的(此處淚奔)。好,繼續深挖一下需求。要實現城市內快速出行,最簡單的要實現3點:
1. 當我趕時間時,我可以加快速度
2. 當我遇到障礙物時,我可以減速
3. 當我遇到障礙物時,我可以繞過
嗯,有了3個細化的需求,有點感覺了。這裡可以引入風靡全球的DDD落地大法-事件風暴(Event Storm,簡稱ES)。在ES的過程中,會識別出業務問題中的關鍵事件,觸發事件的命令與觸發者(角色)。回到我們的場景,會是這樣: