[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法

前言:

系统内部架构设计关注的重点:细粒度模块的划分,即静态逻辑架构,并不关心架构设计中4+1视图的所有的视图,也不关心模块之间的时序关系!!!因此,用例图并不是模块划分的输入依据,用例中的时序关系图用来验证模块划分是否充分与合理!!!

15. 模块划分的综合技术与4步骤法

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第1张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第2张图片

本章把前面切分模块的各种方法都综合了起来,模块划分的综合技术与4步骤法。

15.1 像专家一样思考

15.1.1 自顶向下vs.自底向上,垂直切分vs.水平切分

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第3张图片

上图展现了设计成果的来源,即架构设计成果是如何获得的,架构设计来源于设计思想,包括水平和垂直切分以及分组的思想,设计思想指导把表层用户需求转换成内部的设计模块的划分,指导用户需求、概念模型向实际软件的开发模块转化。概念模型和需求又以三种方式呈现:

  • 概念架构的层次模式 =》概念分层转换成设计架构封层,三层或四层、子层。

  • 功能树 -》需求层面、行为层面的功能树转换成架构层面的功能模块。

  • 用例 =》用户需求层面的用例转换成静态的类图和动态的序列图。

因此,在设计思想的指导下,把概念模型的分层模式、功能树、用例转化成了架构设计的成果:模块化结构。

备注:

模块化结构只是架构的一方面,是静态视图,而不是架构的全部,架构设计还包括动态视图。

15.1.2 横切竖割,并不矛盾

功能模块:是纵向的概念,是纵向分组、是纵向切分、是系统向外呈现的行为特征Feature、场景Senario、用户故事User Story、功能特征Funtion等。功能模块的核心词功能,就呈现出的行为特征的组合。

分层模型:是横向的概念,是水平分层、是水平切分、是自外向里的剥离成一层层,分层是设计,而不是需求!!!因为已经对系统内部进行了切分、拆解。

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第4张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第5张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第6张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第7张图片

15.2 模块划分的4步骤方法——EDD方法

15.2.1 封装驱动设计的4个步骤

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第8张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第9张图片

用例:关注的是当前的细粒度模块划分情况下,细粒度模块之间的关系,以及当前的模型对用例的满足情况。

功能树和上下文图:关注客户的功能需求,而不关心内部的时序图,因此,在划分功能模块时,并没有把用例图做为功能的输入,而是作为功能划分后的进一步优化和时序定义。而功能树和上下文图,只关心系统外部关联者对系统的述求。因此,可以作为功能划分的输入和依据。

分层的输入依据:上下文图,即根据上下文图进行进行软件模块的分层设计。

系粒度功能的输入依据:功能树,即根据功能树和分层模型进行细粒度划分。

模块的优化:用例图,即根据用例对模块结构进行优化和调整。

15.2.2 细粒度模块的划分技巧

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第10张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第11张图片

备注:分层是相对的,某一层内部可以进一步再进行分层,即子层。

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第12张图片

即一个粗粒度模块是由多个功能特征组成。

每个功能特征由是由多个位于不同“层”的细粒度模块组成。

因此,一个粗粒度模块是有多组位于不同“层”的细粒度模块组成。

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第13张图片

备注:

通用模块是相对专用模块而言的,通用模块是可以被多个模块复用和共享调用的模块,被其他模块调用或共享的程度越高,通用性越好。不能被其他调用的模块称为专用模块。

通用模块和专用模块是在模块划分的过程中逐步形成的,而不是一蹴而就。

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第14张图片
[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第15张图片

框架:通用性代码!!!

框架就是能够被所有其他模块共享的模块,能够为其他模块提供服务的一种机制。

15.3 实际应用(13)——对比MailProxy案例的4种模块划分设计

15.3.1 设计

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第16张图片

备注:

先分层,再细化、后重组、再优化,最后得到细粒度系统架构。

15.3.2 设计的优点、缺点

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法_第17张图片

备注:

大部分架构师都停留在高层架构设计,而没有深入到细粒度模块的划分上。

最高层:呈现的是需求requirment、feature,实现现象层。

功能组:是纷繁复杂现象的归类,归类是自然界和人类社会的基本特征,物以类聚人以群分。

分层:呈现的是设计design,呈现的复杂系统中上下层等级服务关系,等级是自然界和人类社会的组成方式!!!

细粒度模块:呈现的是设计Design,呈现的是模块module。一个复杂的系统,细粒度模块,是有大量的高层feature驱动的,是根据feature的分类组织的。

你可能感兴趣的:(架构之路,架构,需求分析,领域模型,系统架构,用例图)