TDD 算不算契约式设计?
2020-04-09 本文已影响0人
袁慎建
关于题目中的契约式设计,推荐先阅读以下两篇故事汇:
TDD不算契约式设计,因为TDD是一种软件开发方法,DbC是一种设计思想,这两个概念本身不在一个维度上。但要说TDD里面涉及的一些思想,是有关联的。为何这么说?请继续往下看。
TDD提倡以终为始的思考方式,这个“终”就是你跟客户(业务方)定下的契约。而这个"契约"对双方的约束:
- 客户要按照之前商量好的规则来使用系统。
- 你(系统)需要满足客户各种规则下的期望。
客户很可能在规则之外行事(假设客户喜欢不按套路出牌),比如需求变更(C、R、U、D),那其实你跟客户的"契约"也发生了变化了,通常会尝试对新的需求达成一致后形成一套新的"契约"。
再往外延伸,你满足了客户这些业务需求后,特定时间内交付了系统,客户会支付你一笔劳动报酬,这也是契约,比如商务合同。
所以说,TDD中也浮现了契约的思想。参加过我的TDD训练营小伙伴应该都深有体会的一点是:Tasking(面向业务问题的拆分)是一个关键步骤,那么Tasking出来的Task,就可以类比成一个个小的契约:
- Given:代表对的约束
- When:约定好的行为
- Then:对你(系统)的约束
实例化一下:
- Given 一个有空位的储物柜
- When 用户来存包
- Then 存包成功,并拿到一张票
以上Task就是一个针对用户存包行为的契约,契约对双方的约束:
- 客户需要提供一个有空位的储物柜。
- 你(系统)需要帮助用户存好包,并且返回一张票。
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2u3d25d0ch8gw