EA&UML日拱一卒--序列图(Sequence Diagram)::连续

今天是序列图的最后一个话题,连续(continuation)。在UML中是这样定义连续的:


交互中的一个标签,允许将条件拆分成两个片段。而这两个片段在语义上是连在一起的。


示例


这里采用EA帮助系统中的例子,当然版权也属于SparxSystems。首先是主流程。


EA&UML日拱一卒--序列图(Sequence Diagram)::连续_第1张图片

eatab调用repos:File的reqConn方法,如果请求成功,则调用logConn后执行pathSucc连续标签引导的部分,如果失败,则执行pathFail连续标签引导的部分。两个标签分别引导的处理被设计到了ConnHandler中。

EA&UML日拱一卒--序列图(Sequence Diagram)::连续_第2张图片


pathSucc标签接下来的处理是向estab返回connListen,而pathFail标签接下来的处理是调用ReCt的trackFail方法跟踪错误。


使用了连续标签以后,使用者可以自由定义成功和失败时的处理。


如果本文就这么结束了,是不是觉得太简单了?


之所以把本文拖到今天才写是因为有一个疑问一直没有解决:如果连续的效果仅限于此的话,完全可以通过保存reqConn的执行结果,然后再利用参数传递给ConnHandler的方式来实现,这样只会更加清晰。


我们忽略了什么呢?


还是用自创的例子来说明吧。这里以某智能摄像头为例。


EA&UML日拱一卒--序列图(Sequence Diagram)::连续_第3张图片


基本流程如下:


5STimer每次发生Timeout以后会向SmartCamera发出通知,SmartCamera接到通知后拍摄照片,然后把拍摄的照片向云端传送。这里为拍摄成功,拍摄失败,传送成功,传送失败分别准备了连续标签以备其他处理使用。


下面是一种处理方式的例子:


EA&UML日拱一卒--序列图(Sequence Diagram)::连续_第4张图片


这里只是简单地在拍照失败,云推送失败时向MobilePhone报告错误信息。也可以定义其他的处理,例如云推送失败时本地保存等等。


在本例中,拍照/推送的处理处于无限循环的处理中,永远(基本上)也等不到处理结束的时候。因此也就不存在返回值如何如何了。


总结


连续(continuation)更像条件分支中的回调函数。


以上就是今天的文章,如果它能给您带来些许收获,欢迎点赞并推荐给朋友!

阅读更多更新文章请扫描下面二维码,关注公众号【面向对象思考】

EA&UML日拱一卒--序列图(Sequence Diagram)::连续_第5张图片

你可能感兴趣的:(UML)