实际上,本文的正确标题应该是《如何通过DDD构建解决快速出行问题的领域模型》。快速出行才是要解决的问题,汽车只是其中一种解决方案或者落地的实现而已。严格区分问题域与解决方案域是实施DDD的老大难问题了。需要死磕这个问题的读者可以参考ThoughtWorks洞见的这篇文章《当Subdomain遇见Bounded Context》,这里不展开讨论。本文的目的是要展现一个在非IT领域运用DDD构建领域模型的例子。
先出要解决的业务领域问题:我要实现城市内快速出行。
就只有一句话,没有细节信息,感觉什么都做不了。但往往需求都是这样的简单粗暴的(此处泪奔)。好,继续深挖一下需求。要实现城市内快速出行,最简单的要实现3点:
1. 当我赶时间时,我可以加快速度
2. 当我遇到障碍物时,我可以减速
3. 当我遇到障碍物时,我可以绕过
嗯,有了3个细化的需求,有点感觉了。这里可以引入风靡全球的DDD落地大法-事件风暴(Event Storm,简称ES)。在ES的过程中,会识别出业务问题中的关键事件,触发事件的命令与触发者(角色)。回到我们的场景,会是这样: