三、战略设计(识别问题域, 提炼领域知识)
这是战略设计的第二部分,我们将会花费大量的时间去讲关于如何更好地去拆解业务,提炼领域知识。那么这篇文章的关键词就是, 提炼领域知识。
上篇文章中我们提到了将需求做成故事集册,但是这个故事的描述是非常粗糙的,下面我将用具体的方法从细节中提炼更细化的需求。
提炼领域知识:
- 我们需要从上文中的问题域出发,细化需求。
- 后面这些领域知识将会被进一步转化成"代码表达"
当然这里同样提供一款适用的模板:
英文表达 | 中文表述 |
---|---|
Given | 给定的条件 |
When | 实际的条件 |
Then | 期望的结果 |
老规矩,我这里例举一个例子,这里是借鉴别人在电商领域的例子:
王五的用户故事:
(1)作为一名销售经理,
(2)我希望为订单设置合适的配送的总额阈值。
(3)以便于促进平均订单总额的提高
这里首先放一个上文中提到的用户故事,这个需求其实大部分人都接触过, 每次我们在美团等平台上点外卖时,在下面的购物车中都会提示的满减优惠。 跟着这个用户所提出的问题域,我们更细化地分出了多种场景:
场景一: 订单满足配送免费的总额阈值
Given: 配送免费的总额阈值设置为100元人民币
And: 我目前的购物车总计90元人民币
When: 我将一个价格为10元人民币的商品添加到购物车
Then: 我将获得配送免费的优惠
场景二: 订单不满足配送免费的总额阈值
Given: 配送免费的总额阈值设置为100元人民币
And: 我目前的购物车总计90元人民币
When: 我将一个价格为5元人民币的商品添加到购物车
Then: 我应该被告知如果我多消费5元人民币,就能够享受配送免费的优惠
从上面的模板中,其实不需要严格按照这种格式,只是为了让大家更好地理解,把这个问题(或功能)拆分成多种情况,分析出用户可能产生的所有情况。然后针对这种可能产生的行为,系统将给出对应的对策。如果按照这个来拆分,一个功能下或问题下将会有非常多的场景;后面我们会将这些场景转换成代码。
总结一下
直至这里,作为一名程序员,可能都没有听到比较令你惊喜的点。而且你会发现,现在都只是整理非常零散的需求,针对不同的用户产生不同的故事,然后对用户故事细化,提炼出丰富的但却非常散乱的领域知识,并且这些工作仿佛离我们都不是很贴合。其实你慢慢可以发现,DDD的那种神秘感在慢慢消失,我相信到最后你会感叹—DDD真正落地并不容易,并非那么容易发挥它真正的价值!