连载:面向对象葵花宝典:思想、技巧与实践(21) - SSD

简介:

用例图是用来描述系统的,而SSD(系统序列图)又是来描述用例的,oh my god,这不是在玩我们么?抓狂


System Sequence Diagram,缩写为SSD(注意不要与SSD硬盘混淆),中文翻译为“系统顺序图”,主要用于描述某个用例的某个分支场景下,外部参与者与系统的交互过程。简单来说:SSD就是用例的可视化描述

 

细心的朋友可能会发现,前面我们在介绍“用例方法”的时候说不需要画图,这里又说SSD是用来描述用例的,这不是互相冲突了么?

 

事实上并不冲突,原因在于:用例方法分析需求的时候,确实不需要图;但用例方法分析完成后得到的用例,我们可以使用SSD让用例更直观一些

 

SSD有几点需要特别注意:

1)SSD不是标准的UML图形:UML只有顺序图、用例图,但是没有一个专门的“系统顺序图”;之所以叫做“系统”顺序图,是因为这个顺序图中只有两类对象:系统、与系统交互的对象;

2)SSD是用来描述某个用例的某个分支,而不是描述系统的结构;

3)画SSD的时候,整个系统被当做一个黑盒,不涉及系统的分解

4)不需要为每个用例每个分支都画一个SSD,挑出关键的用例和分支即可;

 

有的朋友可能会有疑问:如何知道哪些用例的哪些分支是关键的呢

 

我的答案是:你认为是关键的你就画,你认为不是关键的你就不画;如果你认为所有的用例都很关键,那么所有的用例你都画即可,只要你不怕麻烦或者工作量太大;如果你认为所有的用例都很简单,那么一个都不画也可以。至于你的判断是否正确,主要靠经验积累,当经验不够的时候,也可以求助有经验的人。

 

以POS机为例,假如我们认为POS机的正常处理流程是关键分支,则对应的SSD如下:

 用例ssd

仔细对照SSD和POS机的用例,我们会发现SSD和用例基本上是对应的,但并不完全对应,例如:

Ø 用例中第1步是“顾客携带选择好的商品到收银台”,但SSD中第1步是开始交易;

Ø 用例中“顾客将钱交给收银员”,但SSD中并没有对应的步骤;

Ø 用例中最后一步是“买单完成,顾客携带商品和小票离开”,但SSD中最后一步是“交易结束”;

 

为什么会出现这种不对应的情况呢?

主要原因在于:用例是整个业务的流程,而SSD是站在系统的角度来描述系统与外部对象的交互,这就需要我们在画SSD的时候做一些技巧性的处理:

Ø 删除系统无关的业务步骤

例如上述的“顾客将钱交给收银员”,这个步骤和POS机没有关系,因此无需体现,再说了,就算你想体现,你也体现不了;

Ø 将业务语言转换为系统语言

例如用例中是描述“顾客携带选择好的商品到收银台”,但对应系统来说,这就意味了“交易开始”;同样,“买单完成,顾客携带商品和小票离开”意味着“交易结束”。

 

有的朋友可能会认为,应该在用例分析的时候就应该详细写清楚。例如,“买单完成,顾客携带商品和小票离开,收银员告诉POS机交易结束”。

这种想法本身没错,但问题在于,理想和现实总是有差距的,用例不可能那么完善,甚至有的时候用例可能都存在错误,如果我们自己没有一定的分析和理解能力,完全依赖原始的用例,这样做是不可能设计出优秀的系统的,甚至连合格的系统都可能做不到。

 

综合上面的分析,我们可以看到,SSD虽然来源于用例,但还需要在用例的基础上稍微加工一下,使得SSD能够更加聚焦于“系统”这个主角。

 

最后小小吐槽一下:用例图是用来描述系统的,而SSD又是来描述用例的,oh my god,这不是在玩我们么?

================================================ 
转载请注明出处:http://blog.csdn.net/yunhua_lee/article/details/21728601
================================================ 


相关文章
|
搜索推荐 算法 前端开发
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
391 0
|
安全 算法 网络安全
一篇文章让你彻底弄懂SSL/TLS协议
一篇文章让你彻底弄懂SSL/TLS协议
一篇文章让你彻底弄懂SSL/TLS协议
|
10月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
398 0
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
1587 4
|
存储 弹性计算 大数据
阿里云服务器怎么样?全访问解析云服务器ECS功能、租用、优缺点及使用说明
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可根据业务需求选择实例、存储类型和网络配置。阿里云服务器适用于Web应用、游戏、大数据和深度学习等场景,提供免费试用和不同优惠套餐。众多知名企业如新浪微博等信赖阿里云服务。更多信息可访问阿里云官方网站。
541 5
|
机器学习/深度学习 数据可视化 算法框架/工具
使用Python实现深度学习模型:视频处理与动作识别
【7月更文挑战第16天】 使用Python实现深度学习模型:视频处理与动作识别
708 17
|
机器学习/深度学习 编解码 计算机视觉
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
2717 0
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
|
分布式计算 C语言 Python
基于Python实现MapReduce
一、什么是MapReduce 首先,将这个单词分解为Map、Reduce。 • Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理。每个Map任务将输入数据映射为一系列(key, value)对,并生成中间结果。 • Reduce阶段:在这个阶段,中间结果被重新分组和排序,以便相同key的中间结果被传递到同一个Reduce任务。每个Reduce任务将具有相同key的中间结果合并、计算,并生成最终的输出。
|
Java API Spring
Spring6(七):手写IoC
Spring6(七):手写IoC
127 0