14 用例驱动的模块划分过程
![](https://i-blog.csdnimg.cn/blog_migrate/782c79bfd2bd813e30cf414df8971ee0.png)
描述用例的两种方式:
图形描述:用例序列图,直观,但修改不方便,版本控制不方便。
文本描述:用例规约描述,不直观,但修改方便,版本控制方便。
14.1 描述需求的序列图 vs. 描述设计的序列图
说明:时序图是软件系统动态交互最好的方式。
![](https://i-blog.csdnimg.cn/blog_migrate/4d76fc61bee0d710f8460f22d6238923.png)
备注:描述需求的序列图,是站在用户的角度描述的系统与外部的交互,是需求,也是设计。
14.1.1 描述“内外对话” vs. 描述“内部协作”
序列图既可以描述需求:外部用户对系统的需求 =》 来自用例图
序列图也可以描述设计:内部模块与模块之间的交互 =》对用例的细化
![](https://i-blog.csdnimg.cn/blog_migrate/f6b3650181214847a5a66672a36dc1be.png)
![](https://i-blog.csdnimg.cn/blog_migrate/af75bd49919d9861ccdeab8c2af5e26c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e4aa471f8cfb6b7c285313b39b87fb19.png)
用用例中使用到的不同的“名词”划分为不同的“类”,根据相似性对“类”进行汇总,就得到了“功能模块”。这种方法,并非得到功能模块,然后再在功能模块中切分“类”。
因此,用例划分模块的过程是先分后总的过程!!!
14.1.2 《用例规约》这样描述“内外对话”
通过用例规约,可以详细描述用户与系统交互的行为。
![](https://i-blog.csdnimg.cn/blog_migrate/26c01b1949b5a505ce2ea0bd09bca991.png)
14.2 用例驱动的模块划分过程(非常重要!!!)
![](https://i-blog.csdnimg.cn/blog_migrate/377aba69a23c3e92f0c5597d64836c8c.png)
14.2.1 核心原理:从用例到类,再到模块
![](https://i-blog.csdnimg.cn/blog_migrate/53d0f9a3af72bfa92b93f97e6505fb77.png)
备注:
用例是是需求,是软件的功能需求。协作图是功能设计,是架构设计,描述如何划分功能模块和模块之间的关系实现用例的功能!!!
![](https://i-blog.csdnimg.cn/blog_migrate/6b30c20ed6cc6574f7292e7044dafb7b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c6b53ed810ebe9fce7a8865152bfec1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f901f5ca328523e55cdd0c82566f18bf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/56c30465038fff7a3a7de9838ef35c37.png)
备注:对象图=》类图 =》包图(模块)
![](https://i-blog.csdnimg.cn/blog_migrate/7b359ad04af1d01fd1fce2a713810859.png)
备注:
本节阐述了一个关键的方法:如何从用例获得内部的模块设计!!!
(1)方法1:鲁棒图,能够获得内部模块。
(2)方法2:序列图,能够获得内部模块之间的交互。
14.2.2 第1步:实现用例需要哪些类
![](https://i-blog.csdnimg.cn/blog_migrate/a99c32542c7296e7e5ae17168ea3ca6a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d43fd0dbe7de1fd14b16846e57afe9d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d1c5dedb0c24a330b7e26f7971e58137.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3378aeb8388b50d32e60f80e3c2ff86e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/00ed19d1dbb94633033a03957f2998c0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7ac168a37ef786a7751fdf0694b2f6d0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7486d84e7f87c5c86578582a796a32b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4103a8494a61f6521cc9c728a6d1cd4f.png)
14.2.3 第2步:这些类应该划归哪些模块
![](https://i-blog.csdnimg.cn/blog_migrate/95280f613c058475e4d6fdf506c8be1f.png)
备注:
很显然,分层和画模块并非一会事,并非同一个层的所有对象,就在同一个模块中。
界面交互模块:包含了界面层、业务逻辑处理层。
压缩控制模块:包含了解压和压缩的业务逻辑。
源文件读写模块:包含了业务逻辑层和源文件数据层。
压缩读写模块:包括了业务逻辑处理层和压缩后数据的数据层。
14.3 实际应用(12)——对比MailProxy案例的 4种模块划分设计
14.3.1 设计
![](https://i-blog.csdnimg.cn/blog_migrate/97fd91f213eb68c15ef6ebc3a7c0c44a.png)
14.3.2 设计的优点、缺点
![](https://i-blog.csdnimg.cn/blog_migrate/f6164ead076ef4e0462ff806ad1f83e8.png)