当前位置: 首页 > news >正文

系统架构设计师之系统设计模块笔记

一、系统设计概述

  1. 定义与目标
    系统设计是根据系统分析结果,制定系统构建蓝图的过程,核心目标是合理分配功能需求、优化资源使用、确保系统高内聚低耦合,并满足性能、安全、可扩展等非功能需求。
  2. 主要内容
    • 概要设计:将功能需求分配给软件模块,确定模块调用关系,形成模块结构图(系统结构图)。
    • 详细设计:包括模块内算法、数据结构、数据库物理设计、用户界面设计等,并编写详细设计说明书。

二、系统设计原则

  1. 结构化设计原则
    • 模块独立性:高内聚(功能单一)、低耦合(模块间依赖少)。
    • 模块规模:大小适中,避免过深调用层次(一般不超过7层)。
    • 扇入与扇出:多扇入(被调用次数多,复用度高)、少扇出(减少依赖)。
    • 接口与作用域:单入口单出口,作用域在模块内部,避免全局变量。
  2. 面向对象设计原则(SOLID原则)
    • 单一职责:类职责单一。
    • 开闭原则:对扩展开放,对修改封闭。
    • 里氏替换:子类可替换父类。
    • 依赖倒置:依赖抽象而非具体实现。
    • 接口隔离:使用多个专门接口而非单一总接口。
  3. 质量属性设计
    • 性能:优化算法、缓存机制、负载均衡。
    • 安全性:数据加密、权限管理、入侵防护。
    • 可扩展性:插件化设计、微服务架构、横向扩展能力。

三、设计模式

  1. 分类
    • 创建型:单例、工厂方法、原型模式(解决对象创建问题)。
    • 结构型:适配器、桥接、装饰器模式(处理对象组合)。
    • 行为型:观察者、策略、责任链模式(优化对象交互)。
  2. 高频考点
    • 单例模式:确保全局唯一实例(如配置管理)。
    • 工厂模式:封装对象创建逻辑(如数据库连接池)。
    • 观察者模式:实现事件驱动(如消息订阅)。

四、模块结构设计

  1. 模块定义
    • 要素:输入/输出、处理功能、内部数据、程序块。
    • 模块结构图:展示模块调用关系,包含模块、调用箭头、数据流、控制信息及转接符号。
  2. 分层架构
    • 典型分层:表现层(用户交互)、业务层(核心逻辑)、数据层(持久化存储)。
    • 优点:职责分离、复用性高、易于维护。

五、数据库与数据设计

  1. 设计要点
    • 类型选择:关系型数据库(Oracle、MySQL)适合强一致性场景;非关系型(MongoDB、Redis)适合高并发与灵活数据结构。
    • 性能优化:索引设计、分区存储、连接池管理。
    • 安全性:数据加密、备份恢复策略、权限隔离。
  2. 分布式数据库
    • 垂直分割:按字段分表(如用户信息与订单分离)。
    • 水平分割:按数据行分片(如按用户ID分库)。

六、系统架构风格

  1. 常见架构模式
    • C/S架构:客户端-服务器,适用于高交互场景。
    • 微服务架构:服务拆分、独立部署(如Spring Cloud)。
    • 事件驱动架构:通过事件总线解耦组件(如Kafka)。
  2. 设计考量
    • 可扩展性:通过负载均衡与弹性伸缩应对流量波动。
    • 容错性:冗余设计、故障恢复机制(如主从复制)。

七、考试高频考点总结

  1. 模块结构图与设计原则:扇入/扇出、高内聚低耦合。
  2. 设计模式分类与应用场景:创建型、结构型、行为型模式举例。
  3. 分层架构与微服务对比:职责分离与独立部署的优缺点。
  4. 数据库设计优化:索引、分区、连接池配置。

关于我:IT从业5年,主要擅长Java技术栈相关内容,致力于分享Java技术相关的文章,欢迎关注我公号java_lww,一起努力提升技术人的核心能力。
交个朋友吧,我是一个爱好广泛,,灵魂有趣的人~

相关文章:

  • Redis进阶--哨兵
  • 【Git】--- 多人协作实战场景
  • BFG Repo-Cleaner 教程:快速清理 Git 仓库中的敏感数据和大文件
  • Android InstalldNativeService::getAppSize源码分析
  • Ubuntu系统下的包管理器APT
  • Fay 数字人部署环境需求
  • Ubuntu下载火狐浏览器
  • Python学习笔记(9)关于元组
  • P1049 装箱问题
  • PPT处理控件Aspose.Slides教程:使用 Java 编程创建动画幻灯片
  • 解析Java包核心知识
  • 单链表——C语言实现
  • c++进阶--智能指针
  • 第十三天 - Ansible基础架构 - YAML语法与Playbook - 练习:批量配置部署
  • Kaggle-Digit Recognizer-(多分类+卷积神经网络CNN)
  • 集成学习+泰坦尼克号案例+红酒品质预测
  • pipe匿名管道实操(Linux)
  • SpringBoot集成Ollama本地模型
  • AllData数据中台升级发布 | 支持K8S数据平台2.0版本
  • 系统变量和用户变量的区别是什么