详细设计基础

什么是详细设计

image-20220428111219093

  • 主要位于中低层设计
  • 模块之内的设计,模块之内实现的机制

软件体系结构设计定义了模块的规格,详细设计实现了模块的细节设计机制

  • 中层:对象规格
  • 低层:对象实现

详细设计需要设计者考虑风格,功能和许多方面

Quality attributes in Detail Design

  • 修改、维护、表现

详细设计的输入

我们有什么

  • 需求规格说明
  • 体系结构设计说明文档

从需求、体系结构设计到详细设计

image-20220428111733208

详细设计从哪里开始

  • Context

    • 模块之间的规格
    • 实现的职责
  • 需求:分析类图

  • 需求:系统顺序图

  • 软件体系结构:构件之间的接口

详细设计的输出

image-20220428112307843

面向对象详细设计

面向对象设计的思想

职责

  • 数据职责
  • 行为职责

数据职责和行为职责在一起

职责驱动的分解:职责有不同程度的抽象,有大职责和小职责之分,大职责分配给高层次的部分

  • 高内聚:模块内部联系紧密

  • 低耦合:模块之间联系少一点,

职责不要覆盖,也不要缺少

代理:委派给其它模块实现职责

协作

对象之间必须是协作的

应用被分解为一系列不同的行为,交给不同的对象实现

面向对象的设计过程

通过职责建立静态设计模型

抽象对象的职责

image-20220428114015140

类之间的关系

  • 类之间的关系

image-20220428114045024

  • 类图

GRASP Patterns

描述如何将职责分配给类

  • 高内聚,低耦合

  • 信息专家

    职责分配的原则:分配职责给有持有实现这个职责必须的信息的类

  • 创建者

  • 控制器

添加辅助类

  • 接口类
  • 记录类(数据类)
  • 启动类
  • 控制器类
  • 实现数据类型的类
  • 容器类

通过协作建立动态设计模型

抽象对象之间的协作

  • 从小到大,将对象的小职责聚合形成大职责
  • 从大到小,将大职责分配给各个小对象
  • 同时运用,共同完成对协作的抽象

顺序图:可以用顺序图表示对象之间的协作,表达对象之间如何通过消息的传递来完成比较大的职责

image-20220505102536734

状态图

image-20220505102626644

明确对象的创建

image-20220505103036613

  • 例子

    • 人和心脏

    • image-20220505102701720

      image-20220505102805087

image-20220505104006435
SquareBoard创建Square,是组合关系

Piece:如果某个选手固定一个颜色的棋子,PlayerPiece是组合关系,PiecePlayer创建(如果先有很多颜色的棋子,再由选手自由选择(PlayerPiece不是一一对应)则是聚合关系,Piece应该由MonopolyGame创建)

PlayerMonopolyGamePlayer是聚合关系

选择合适的控制风格

Controller

  • 如何处理系统的事件

控制器模式:选择:

  • 业务或全局组织
  • 完全系统
  • 模拟出来的对象
  • 新的类

image-20220505105909603

image-20220505105931858

image-20220505110057498
不好的设计,展示层直接调用了业务逻辑

image-20220505110304287

好的设计,使用控制器在展示层和逻辑层之间进行隔离

image-20220505111454264

控制风格

image-20220505111807547

集中式

image-20220505111709570

  • 优点:容易找到决策在哪作的,如何作的,容易修改决策
  • 缺点
    • 控制器容易变得臃肿,大而复杂,难以理解和维护
    • 控制器可能把其它组件看作数据仓库
      • 增加耦合
      • 破坏信息隐藏

image-20220505112346750

image-20220505112419524

一个例子

image-20220505112542440

image-20220505112556965

image-20220505112618367

启发

  • 避免大多数消息源与一个组件

  • 让组件小一些

  • 确保职责不会仅仅被分配到很少的部分

  • 确保数据职责和行为职责一致

离散式

  • 特点是有有许多部分包含着少量的数据和少量的职责
  • 流控制难以理解
  • 组件不能只靠自己完成太多任务,增加了耦合
  • 难以隐藏信息
  • 内聚低
  • 模块化(modularity principle)准则难以被满足

启发

  • 避免交流需要每一个部分都需要发送许多消息

image-20220505113241190

委托式

为类间协作开发集成测试用例

详细设计的集成测试

  • 解决模块内部的,类与类之间的协作

  • 重点针对复杂逻辑,采用自顶向下或者自底向上的集成

  • Mock Object, 构造一些假的对象使未完成时也能够集成

image-20220509141444590

image-20220509141518344

image-20220509141548941

结构化详细设计

降低复杂度的方法:同一层次分解;从低层次抽象出高层次

详细设计文档描述和评审

image-20220509141804153

image-20220509141911946

详细设计验证

  • 评审
  • 度量:模块化度量
  • 测试:协作测试

详细设计的评审

image-20220509142032580

详细程度视情况而定