设计模式——系统数据建模设计

158 阅读9分钟

摘要

本文主要介绍了UML在软件系统分析和设计中的应用,详细阐述了六大类关系(泛化、实现、依赖、关联、聚合、组合)及其在UML类图中的表示方法,并通过具体例子说明了这些关系在实际编程中的应用。同时,文章还概述了UML的基本元素,包括类、接口、协作、用例、组件和节点。此外,文章还介绍了软件系统建模的目的、常见建模类型、常用建模方法论、建模工具推荐以及真实项目建模建议顺序等内容。

1. 软件系统建模

软件系统建模(Software System Modeling)是指通过一套可视化方法对系统的结构、行为和交互进行表达、设计与沟通,是架构设计、需求分析、编码实现的重要中间步骤。它连接业务需求与技术实现,确保团队对系统的理解一致,降低出错率和维护成本。

1.1. 🔧 建模的目的

目的描述
需求明确把复杂业务需求变为清晰的模型,形成共识
架构设计构建系统模块结构、交互关系
开发指导为编码提供蓝图,指导模块拆分与责任划分
团队协作提升沟通效率,减少理解偏差
演进与扩展支撑后续架构演进与系统扩展

1.2. 🧱 常见的建模类型(UML为主)

1.2.1. 结构建模(结构图)

图类型描述工具意义
类图(Class Diagram)描述类之间的继承、实现、关联、依赖等关系表达模块结构、责任划分
包图(Package Diagram)显示包与包之间的组织关系架构分层设计(DDD / 分模块)
组件图(Component Diagram)描述系统的组件、接口和依赖关系表达微服务或模块之间依赖关系
部署图(Deployment Diagram)显示物理部署环境和系统部署结构表达系统运行环境部署结构

1.2.2. 行为建模(行为图)

图类型描述工具意义
用例图(Use Case Diagram)展示系统与用户的交互行为用于需求梳理
时序图(Sequence Diagram)表达对象间消息交互的时序分析调用链、数据流
活动图(Activity Diagram)表示业务流程或算法过程表达流程逻辑
状态图(State Diagram)展示对象状态变化表达生命周期、状态控制逻辑

1.3. 🧭 常用建模方法论(理论指导)

方法描述
UML(统一建模语言)最主流的建模标准,覆盖结构与行为
DDD(领域驱动设计)按业务划分建模,聚焦业务核心复杂性
4+1 视图模型逻辑视图、开发视图、进程视图、物理视图+用例视图
架构图(Architecture Diagram)表达服务、模块、数据库等组成和连接

1.4. 🛠️ 建模常用工具推荐

工具特点
PlantUML文本生成图,适合开发者
StarUML可视化建模,UML全支持
Visual Paradigm商业级全面建模工具
ProcessOn / Draw.io在线可协作,适合流程图
Archimate / C4 Model企业架构级、云系统建模更专业

1.5. 🧪 真实项目建模建议顺序(Spring系统示例)

  1. 用例图:梳理用户角色、功能模块(业务端、运营后台、API系统等)
  2. 类图 + 包图:分层架构设计(Controller、Service、Domain、Infrastructure)
  3. 时序图:关键服务间调用链(如下单、支付、风控处理)
  4. 活动图:业务流程建模(审批流程、用户注册流程等)
  5. 状态图:状态机建模(订单、审批、还款状态等)
  6. 部署图 + 组件图:部署环境、微服务、数据库、MQ 等组件关系表达

1.6. 📝 示例:订单系统建模(核心图)

  • 状态图:订单状态变迁图
  • 时序图:下单流程时序图
  • 类图:订单聚合根、商品、用户等类关系
  • 活动图:支付流程活动图
  • 部署图:服务、Redis、MySQL、MQ、API 网关部署结构

2. 对象之间六大关系

面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息和行为并且高内聚。而不同的类之间,应该做到松耦合。当面对应用系统或者需要解决的问题经常是复杂的、高度抽象的,我们 创建的多个对象往往是有联系的,通常对象之间的关系可以分为以下几类:

  1. 泛化关系(继承extends)
  2. 实现关系(实现implement)
  3. 依赖关系
  4. 关联关系
  5. 聚合关系
  6. 组合关系

2.1. ✳️ 泛化关系=继承关系( extends

  • 表示 父类和子类之间 的关系,是一种“ is-a(是一个) ”关系。
  • 子类继承父类的属性和方法,可以重写父类方法。
class Animal {
    public void makeSound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

关系含义:DogAnimal 的一种 —— “Dog is-a Animal”。

2.2. ✳️ 实现关系= 接口实现(implements

  • 表示接口与类之间的关系,类提供接口中定义方法的具体实现。
  • 也是“is-a”的一种,但更偏向行为契约。
interface Runnable {
    void run();
}

class Car implements Runnable {
    public void run() {
        System.out.println("Car is running");
    }
}

关系含义:Car 实现了 Runnable 行为规范。

2.3. ✳️ 依赖关系(Dependency)

  • 表示一个类临时使用到另一个类,常出现在方法的参数、局部变量中。
  • 是一种“uses-a”关系(使用)。

示例:

class OrderService {
    
    public void process(Payment payment) {
        payment.pay();
    }
}
class Payment {
    
    public void pay() {
        System.out.println("Paying...");
    }
}

关系含义:OrderService 依赖 Payment 执行操作,但不直接拥有它。

2.4. ✳️ 关联关系(Association)

  • 表示两个类之间存在某种联系,一个类持有另一个类的引用
  • 是一种“has-a”关系。

示例:

class Teacher {

    private Student student;
}

关系含义:TeacherStudent 存在关联,一个老师可以教多个学生。

2.5. ✳️ 聚合关系(Aggregation)

  • 是一种特殊的关联关系,表示整体与部分之间的关系,部分可以脱离整体单独存在
  • 类似“弱拥有”关系。

示例:

class Team {
    private List<Player> players;
}

class Player {
    private String name;
}

关系含义:Team 拥有 Player,但 Player 也可以脱离 Team 独立存在。

2.6. ✳️ 组合关系(Composition)

  • 是更强的聚合关系,表示整体与部分的关系,部分不能脱离整体单独存在
  • 类似“强拥有”关系。

示例:

class House {
    private Room room = new Room();  // 生命周期绑定
}

class Room {
    ...
}

关系含义:RoomHouse 的一部分,House 消失,Room 也不复存在。

2.7. ✳️ 对象的六种关系总结

关系类型关键字/形式含义示例
泛化(继承)extendsis-aDog is an Animal
实现implementsis-a (行为)Car implements Runnable
依赖参数/方法调用uses-aService uses DAO
关联引用字段has-aTeacher has Student
聚合引用字段(弱)whole-part(可独立)Team has Players
组合引用字段(强)whole-part(生命周期一致)House has Rooms

3. UML基本元素

UML(Unified Modeling Language,统一建模语言)是一种面向对象系统建模的标准语言,它通过一套图形符号描述系统的结构与行为。在实际建模中,掌握 UML 的基本元素 是构建各类模型图的基础。

3.1. 🧩 UML 的三类基本建模元素

类别说明示例元素
结构元素(Structural Things)表示系统中的静态部分(如类、对象、组件等)类、接口、组件、节点、用例、角色
行为元素(Behavioral Things)表示系统中的动态行为交互、状态、活动、消息
分组元素(Grouping Things)对模型元素进行逻辑组织包(Package)
注释元素(Annotational Things)对模型元素进行说明备注(Note)

3.2. 🧱 结构元素(静态)

元素图标(简化描述)含义
类(Class)矩形分为三部分:类名、属性、方法描述一组具有相同属性与行为的对象集合
接口(Interface)椭圆/类图中加«interface»描述一组没有实现的方法供类实现
用例(Use Case)椭圆形描述系统的一个功能点
参与者(Actor)小人图标与系统交互的用户或系统
组件(Component)带两个凸齿矩形代表系统中的模块或服务
节点(Node)立方体或服务器形状表示硬件或运行环境

3.3. 🔁 行为元素(动态)

元素图标(简化描述)含义
状态(State)圆角矩形对象在生命周期中的某个阶段
事件(Event)箭头/消息线引起状态转换的行为或信号
活动(Activity)椭圆/矩形表示动作描述系统的业务流程
消息(Message)带箭头的线对象间的调用行为
交互(Interaction)多个对象之间按照时间发送的消息表达行为协作逻辑

3.4. 📦 分组元素

元素含义示例
包(Package)用于将类、接口、组件等组织成逻辑分组,方便管理和层次结构设计典型用于模块划分,如:com.example.user

3.5. 📝 注释元素

元素图标含义
备注(Note)右上角折角的矩形为模型元素添加说明和解释性文字

3.6. 🔗 关系元素(连接符号)

UML 中有 6 种基本的关系用于表示结构或行为之间的连接:

关系图示描述用途示例说明
关联(Association)实线(可带箭头)表示类与类之间有联系用户和订单之间的关系
依赖(Dependency)虚线 + 箭头A 依赖 B,B 改变影响 AService 依赖 DAO
泛化(Generalization)实线 + 空心三角箭头表示继承(类)或实现(接口)人 <- 学生
实现(Realization)虚线 + 空心三角箭头类实现接口UserServiceImpl implements UserService
聚合(Aggregation)实线 + 空心菱形表示“整体-部分”关系,弱依赖部门 包含 员工
组合(Composition)实线 + 实心菱形表示“强拥有”关系,生命周期一致House 包含 Room

3.7. 🧠 UML 九大图(分类)

图类型分类描述
类图结构图展示类与类之间的静态结构关系
对象图结构图类图的实例快照
用例图行为图展示用户和系统的功能交互
时序图行为图对象之间消息交互的时间顺序
活动图行为图展示系统的控制流程
状态图行为图展示对象状态的变化
组件图结构图描述系统模块与接口
部署图结构图描述硬件与系统部署结构
通信图行为图强调对象间消息传递顺序

博文参考

researchlab.github.io/2016/11/23/…