[答疑]時間作為執行者的用例有前置條件嗎

  • 2019 年 10 月 6 日
  • 筆記

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

Exit mobile version