前言:
系统内部架构设计关注的重点:细粒度模块的划分,即静态逻辑架构,并不关心架构设计中4+1视图的所有的视图,也不关心模块之间的时序关系!!!因此,用例图并不是模块划分的输入依据,用例中的时序关系图用来验证模块划分是否充分与合理!!!
15. 模块划分的综合技术与4步骤法
![](https://img-blog.csdnimg.cn/img_convert/186e9efc99c592fa3da788afcd0b0dc2.png)
![](https://img-blog.csdnimg.cn/img_convert/6bdcf36b54612fd690a88d80612a52cb.png)
本章把前面切分模块的各种方法都综合了起来,模块划分的综合技术与4步骤法。
15.1 像专家一样思考
15.1.1 自顶向下vs.自底向上,垂直切分vs.水平切分
![](https://img-blog.csdnimg.cn/img_convert/13e5d94de508242b50234b7d3e736beb.png)
![](https://img-blog.csdnimg.cn/img_convert/39febb7be7ee0ef24fbc365e8d19f871.png)
上图展现了设计成果的来源,即架构设计成果是如何获得的,架构设计来源于设计思想,包括水平和垂直切分以及分组的思想,设计思想指导把表层用户需求转换成内部的设计模块的划分,指导用户需求、概念模型向实际软件的开发模块转化。概念模型和需求又以三种方式呈现:
概念架构的层次模式 =》概念分层转换成设计架构封层,三层或四层、子层。
功能树 -》需求层面、行为层面的功能树转换成架构层面的功能模块。
用例 =》用户需求层面的用例转换成静态的类图和动态的序列图。
因此,在设计思想的指导下,把概念模型的分层模式、功能树、用例转化成了架构设计的成果:模块化结构。
备注:
模块化结构只是架构的一方面,是静态视图,而不是架构的全部,架构设计还包括动态视图。
15.1.2 横切竖割,并不矛盾
功能模块:是纵向的概念,是纵向分组、是纵向切分、是系统向外呈现的行为特征Feature、场景Senario、用户故事User Story、功能特征Funtion等。功能模块的核心词是功能,就呈现出的行为特征的组合。
分层模型:是横向的概念,是水平分层、是水平切分、是自外向里的剥离成一层层,分层是设计,而不是需求!!!因为已经对系统内部进行了切分、拆解。
![](https://img-blog.csdnimg.cn/img_convert/f02d87aaf4303c5944064eaeaf5b8cde.png)
![](https://img-blog.csdnimg.cn/img_convert/399b3c14956fa4d766cfc3f9ef294a71.png)
![](https://img-blog.csdnimg.cn/img_convert/73cbbc445c669a613ce88e629f9e781c.png)
![](https://img-blog.csdnimg.cn/img_convert/8bb51ea42648c2bc846d8d49ea531545.png)
15.2 模块划分的4步骤方法——EDD方法
15.2.1 封装驱动设计的4个步骤
![](https://img-blog.csdnimg.cn/img_convert/0710399b8c321599ce7585bd89466e47.png)
![](https://img-blog.csdnimg.cn/img_convert/17d2afa77526e8ac20661bebb939129f.png)
用例:关注的是当前的细粒度模块划分情况下,细粒度模块之间的关系,以及当前的模型对用例的满足情况。
功能树和上下文图:关注客户的功能需求,而不关心内部的时序图,因此,在划分功能模块时,并没有把用例图做为功能的输入,而是作为功能划分后的进一步优化和时序定义。而功能树和上下文图,只关心系统外部关联者对系统的述求。因此,可以作为功能划分的输入和依据。
分层的输入依据:上下文图,即根据上下文图进行进行软件模块的分层设计。
系粒度功能的输入依据:功能树,即根据功能树和分层模型进行细粒度划分。
模块的优化:用例图,即根据用例对模块结构进行优化和调整。
15.2.2 细粒度模块的划分技巧
![](https://img-blog.csdnimg.cn/img_convert/9dd7eaf6549efee0b5d96cff59f7e07e.png)
![](https://img-blog.csdnimg.cn/img_convert/520578234d2a5ea915582e27ead43a76.png)
备注:分层是相对的,某一层内部可以进一步再进行分层,即子层。
![](https://img-blog.csdnimg.cn/img_convert/13d23f0035e5d6069255825e36328d5c.png)
即一个粗粒度模块是由多个功能特征组成。
每个功能特征由是由多个位于不同“层”的细粒度模块组成。
因此,一个粗粒度模块是有多组位于不同“层”的细粒度模块组成。
![](https://img-blog.csdnimg.cn/img_convert/24af7ef0c739fbe1c7be5e0a95223550.png)
备注:
通用模块是相对专用模块而言的,通用模块是可以被多个模块复用和共享调用的模块,被其他模块调用或共享的程度越高,通用性越好。不能被其他调用的模块称为专用模块。
通用模块和专用模块是在模块划分的过程中逐步形成的,而不是一蹴而就。
![](https://img-blog.csdnimg.cn/img_convert/21736aa7709483dc1d642eee42dc6969.png)
![](https://img-blog.csdnimg.cn/img_convert/a51ac622ea0151ea6f77eb1d83c1c760.png)
![](https://img-blog.csdnimg.cn/img_convert/db946bab81d594cc07e34bbe1d1d2fd6.png)
框架:通用性代码!!!
框架就是能够被所有其他模块共享的模块,能够为其他模块提供服务的一种机制。
15.3 实际应用(13)——对比MailProxy案例的4种模块划分设计
15.3.1 设计
![](https://img-blog.csdnimg.cn/img_convert/7596dad25340e0a6da2009aaad164b5f.png)
![](https://img-blog.csdnimg.cn/img_convert/3f3947f5d8faa84f560c54e7e901d1c4.png)
备注:
先分层,再细化、后重组、再优化,最后得到细粒度系统架构。
15.3.2 设计的优点、缺点
![](https://img-blog.csdnimg.cn/img_convert/25feef353c6af85385fbdf9e4ff0ede1.png)
备注:
大部分架构师都停留在高层架构设计,而没有深入到细粒度模块的划分上。
最高层:呈现的是需求requirment、feature,实现现象层。
功能组:是纷繁复杂现象的归类,归类是自然界和人类社会的基本特征,物以类聚人以群分。
分层:呈现的是设计design,呈现的复杂系统中上下层等级服务关系,等级是自然界和人类社会的组成方式!!!
细粒度模块:呈现的是设计Design,呈现的是模块module。一个复杂的系统,细粒度模块,是有大量的高层feature驱动的,是根据feature的分类组织的。