体系结构设计
- 分析关键需求和项目约束;
- 通过选择体系结构风格;
- 进行软件体系结构逻辑(抽象)设计;
- 依据概要功能需求与体系结构风格建立初始设计
- 使用非功能性需求与项目约束评价和改进初始设计
- 依赖逻辑设计进行软件体系结构(实现)设计;
- 开发包(构件)设计
- 运行时的进程
- 物理部署
- 完善体系结构设计;
- 添加构件接口;
- 迭代过程3-7
前三个是逻辑设计
后四个是物理设计
分析关键需求和项目约束
案例:
通过选择体系结构风格
案例:
分层风格
- 协议不变的情况下易于修改
- 能够促进并行开发
进行软件体系结构逻辑(抽象)设计
依据概要功能需求与体系结构风格建立初始设计
将需求分配到子系统和模块
- 考虑功能的相同性
- 不同任务,但是相同功能
- 考虑可复用性
- 结构、数据、行为的可复用性
案例:
需要考虑这个销售是否用到Sale的数据 所以我们加入了红色字体的逻辑包
根据这个我们可以把下面的初步设计方案一:
改成下面的初步设计方案二:
使用非功能性需求与项目约束评价和改进初始设计
初步设计的分析
根据这个修改出最终方案
(RMI:远程方法调用)
物理包设计原则
- CCP:共同封闭原则;需要一起改的类放一起
- CRP:共同重用原则;类应该可以被重用
- REP:共同发布原则;单元的重用与单元的释放
- ADP:无环依赖原则;包之间不要有循环依赖
- SDP:稳定依赖原则;不稳定性 = 输出耦合度 / (输入耦合度 + 输出耦合度)
- SAP:稳定抽象原则;稳定的包尽量是抽象包
包的稳定度度量
- 一种方法是计算进、出该包的依赖关系的数目。可以使用这些数值来计算该包的位置稳定性(positional stabilty)。
- (Ca)输入耦合度(Afferent Coupling):指处于该包的外部并依赖于该包内的类的类的数目。
- (Ce)输出耦合度(Efferent Coupling):指处于该包的内部并依赖于该包外的类的类的数目。
- (不稳定性I)
- I=Ce/(Ca+Ce)
抽象性度量
- 包的抽象性用抽象类的数目和包中所有类的数目进行计算。
- 假如说包中类的总数是Nc,抽象类的数目是Na,那么抽象度A=Na/Nc
包设计的过程
- 先CCP原则对把可能一同变化的类组织成包进行发布,
- 随着系统的不断增长,我们开始关注创建可重用的元素,于是开始使用CRP和REP来指导包的组合。
- 最后使用ADP、SDP、SAP对包图进行度量,去掉不好的依赖。
依赖逻辑设计进行软件体系结构设计
(JDBC(Java Database Connectivity)类库包是 Java 用于连接和操作数据库的一套 API(应用程序接口))