EA&UML日拱一卒--序列圖(Sequence Diagram)::連續
今天是時序圖的最後一個話題,連續(continuation)。在UML中是這樣定義連續的:
交互中的一個標籤,允許將條件拆分成兩個片段。而這兩個片段在語義上是連在一起的。
示例
這裡採用EA幫助系統中的例子,當然版權也屬於SparxSystems。首先是主流程。
eatab調用repos:File的reqConn方法,如果請求成功,則調用logConn後執行pathSucc連續標籤引導的部分,如果失敗,則執行pathFail連續標籤引導的部分。兩個標籤分別引導的處理被設計到了ConnHandler中。
pathSucc標籤接下來的處理是向estab返回connListen,而pathFail標籤接下來的處理是調用ReCt的trackFail方法跟蹤錯誤。
使用了連續標籤以後,使用者可以自由定義成功和失敗時的處理。
如果本文就這麼結束了,是不是覺得太簡單了?
之所以把本文拖到今天才寫是因為有一個疑問一直沒有解決:如果連續的效果僅限於此的話,完全可以通過保存reqConn的執行結果,然後再利用參數傳遞給ConnHandler的方式來實現,這樣只會更加清晰。
我們忽略了什麼呢?
還是用自創的例子來說明吧。這裡以某智能攝像頭為例。
基本流程如下:
5STimer每次發生Timeout以後會向SmartCamera發出通知,SmartCamera接到通知後拍攝照片,然後把拍攝的照片向雲端傳送。這裡為拍攝成功,拍攝失敗,傳送成功,傳送失敗分別準備了連續標籤以備其他處理使用。
下面是一種處理方式的例子:
這裡只是簡單地在拍照失敗,雲推送失敗時向MobilePhone報告錯誤信息。也可以定義其他的處理,例如雲推送失敗時本地保存等等。
在本例中,拍照/推送的處理處於無限循環的處理中,永遠(基本上)也等不到處理結束的時候。因此也就不存在返回值如何如何了。
總結
連續(continuation)更像條件分支中的回調函數。
以上就是今天的文章,如果它能給您帶來些許收穫,歡迎點贊並推薦給朋友!
閱讀更多更新文章,請關注【面向對象思考】微信公眾號!
推薦閱讀:
※類圖::添加操作和方法
※狀態圖::開篇
※EA&UML日拱一卒--序列圖(Sequence Diagram)::時間約束
※EA&UML日拱一卒--活動圖::活動分區