所在位置:答疑 - 内容   
时间作为执行者的用例有前置条件吗
 

a 2019-7-1 13:34

潘老师,想问下时间作为执行者会有前置条件吗?时间是自然流逝,到点执行,我个人觉得是没有前置条件的。举个例子,微信支付的退款,1直连商户系统-受理退款。2时间-处理退款,我们目前写了前置条件,这样对吗

黑衣道人?:

前置条件是执行前进行判断的条件,时间到先对前置条件进行判断,不满足就不执行或抛出异常,所以,时间作为执行者,也是有前置条件的。

a:

1,书中写法,步骤一,当到达时间周期时,这句话。如果有前置条件还会到步骤一吗。2,微信支付系统的内部规范,时间的步骤一,时间驱动系统做某事,这个时候是先有前置条件还是步骤一?

潘加宇:

前置条件如果不满足,系统不响应执行者的请求。

注意,是不响应,而不是"验证输入不合法给出异常结果"。

事实上想到这里就够了,再往下想就不是需求了。

你可能想:不响应执行者的请求怎么实现?爱怎么实现怎么实现呗。

可以像下面那样:

先看执行者是人的情况,第一步"会员选择项目",下一步"系统反馈项目详情",不响应第一步的实现可以是"会员界面"中的ListItem甚至整个ListBox的Enabled为false。

同理,执行者是时间的情况,这时边界类就是"时间接口(定时器)",和上面对应的做法是Timer的Enabled为false,而不是在Tick事件里面验证后拒绝。

为了更方便理解,再补充一下:

用例里面这些概念是借鉴了1986年Bertrand Meyer提出的Design by Contract。以下截屏自Bertrand Meyer的书:



一个栈当前到底是不是满的,和有没有、什么时候有调用者调用put操作没有关系,但是很多书和文章把前置条件误解为对输入参数做检查,例如,对put(x)操作里面的x作检查。

目前的主流编程语言并没有原生支持Design by Contract