三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Day03-系统设计总览

Day03-系统设计总览

0、开篇:系统设计到底设计了什么?

上一节我们提到了需求工程,它回答了"要做什么",本篇我们聊一聊系统设计,系统设计回答的其实是"怎么把它做出来"

很多同学一听到"系统设计"四个字,脑子里蹦出的第一个画面就是 UML 类图、数据库表结构。没错,这些确实属于系统设计,但它们也只是冰山一角。

那么系统都包括哪些呢?

1、系统设计的九大类别

完整的系统设计方案,一般是由以下九个部分构成的:

设计类别

核心内容

它在解决什么问题?

网络设计

选择网络结构,安排设备分布、布线部署,划定节点权限

系统跑在什么样的"物理底座"上?

代码设计

包括面向对象设计和结构化设计,实现代码的唯一化、规范化、系统化

代码怎么写才规范、可维护?

输入设计

确保输入数据的完整性、正确性、一致性

怎么堵住不合规数据源头?

输出设计

确保输出数据的完整性、正确性、一致性

系统产出的结果怎么呈现?

处理流程设计

确定各系统模块的内部结构——局部数据组织、控制流、加工过程与细节

数据进来之后经过怎样的流水线才变成结果?

数据存储设计

选择存储方式、介质、组织方式,估算容量

数据存在哪里、怎么存?

数据库设计

概念设计 → 逻辑设计 → 物理设计

结构化数据怎么建模和落地?

用户界面设计

优化交互体验,黄金三原则:置于用户控制之下、减轻记忆负担、保持界面一致

用户怎么和系统对话?

安全性和可靠性设计

确保系统安全有效运行,对运行环境和数据处理进行控制

系统会不会崩?会不会被攻击?

本篇我们聚焦其中最关键、也是选择题考查最多的三块:处理流程设计、输入输出设计、用户界面设计。其余部分将在后续篇幅展开。

好,既然要深入,我们先问第一个问题。

2:什么是"流程"?——六个要素一个都不能少

处理流程设计是所有系统设计的骨架。没有流程,代码只是一堆散落的砖块,不知道往哪搬呐。

那到底什么是"流程"?

流程是一组将输入转化为输出的相互关联或相互作用的活动。

一句简单的话,但拆开来看,它包含了6 个基本要素分别是输入资源、活动、活动的相互作用(结构)、输出结果、用户和价值

用一个常见的例子——电商平台的"退货退款"流程——来把这六个要素具象化:

要素名称

要素含义

退货退款场景中的体现

输入资源

触发流程的初始材料

用户提交的退货申请(含订单号、退货商品信息、原因、凭证图片)

活动

流程中的具体操作步骤

退货申请审核 → 商品状态校验 → 库存更新 → 退款金额计算 → 执行原路退款 → 通知财务/物流

活动的相互作用

流程之间的依赖与协作

与"订单状态管理""库存系统""财务对账""用户信用评分"等流程的交互

输出结果

流程产生的最终交付物

退款到账通知(App/短信)、退货进度状态更新、退货完成确认邮件

用户

流程的服务对象

已购买商品且符合退货政策(如7天无理由、质量问题)的注册用户

价值

流程存在的根本意义

保障用户售后权益,提升购物信任度,完成逆向物流闭环

你会发现:六个要素中,真正"看得见"的只有"活动"那几个步骤。但决定一个流程好不好的,恰恰是那些"看不见"的要素——输入对不对、用户是谁、最终创造什么价值。

这就引出了下一个问题:有了流程的定义,用什么工具把它画出来、让所有人都能看懂?

3:流程设计工具三剑客 —— 图形、表格、语言

处理流程设计需要精确表达过程规则。

业界积累了三类工具:图形工具表格工具语言工具

三类工具各有适用场景,挨个看一下。

3.1 第一剑:图形工具 — 让流程"可视化"

图形工具一共五种,可以按表达能力的演进顺序来理解:

① 程序流程图(PFD) — 最原始的"通行语言"

PFD 用图框表示各种操作,独立于任何程序设计语言,是每个程序员入门的"第一张图"。

优点:直观、易上手。

问题:符号不规范,箭头可以随意乱飞,导致控制流"跳来跳去"——这正是结构化编程要解决的问题。


② N-S图(盒图) — 强制结构化,不许"乱飞"

N-S 图就解决了PFD"随意转移控制"的问题。

它用方框代替传统的流向线,包含五种标准控制结构:顺序型、选择型、WHILE 循环型、UNTIL 循环型、多分支选择型

核心思想一句话:把箭头锁死,只能按结构化规则流转

③ IPO图 — 从模块视角看流程

IPO 图描述模块的输入(Input)→ 处理(Process)→ 输出(Output),结构清晰,常用于系统设计文档。

和 N-S 图的区别在于:N-S 图关注的是"这个模块内部的控制逻辑怎样",IPO 图关注的是"这个模块对外的接口长什么样"

④ 问题分析图(PAD)

PAD 由日立公司提出,支持结构化程序设计,包含五种基本控制结构,执行顺序明确,特别适合嵌套和层次关系的表示。

什么时候选 PAD 而不是 N-S 图?当你的逻辑有很深的嵌套(if 里套 if 里套 while),PAD 的树形展开比 N-S 图的层层缩进更直观。

⑤ 判定树

当业务规则复杂到"if A 且 B 则 X,if A 且 非B 则 Y,if 非A 则 Z"。

判定树用树形结构来表达这种多级条件判断,条件和处理流程一目了然。

3.2 第二剑:表格工具 — 判定表

判定树适合"读",但如果条件之间有多重组合关系——比如 3 个条件各 2 种取值的 2³=8 种组合——判定树的枝叶就会极其茂密。

这种场景下,判定表是更好的选择:用表格形式呈现条件和行动,结构清晰、简明扼要,不会漏掉任何一种条件组合

3.3 第三剑:语言工具 — 过程设计语言(PDL / 伪代码)

当你需要表达非常精细的处理逻辑——比如一个排序算法的实现细节——图形工具就不够用了。

PDL(伪代码)混合了自然语言的表达力结构化程序设计语言的语法,灵活且支持逐步求精,是详细设计阶段的主力工具。

3.4 速查表

分类

工具名称

总结

图形工具

程序流程图 PFD

最通用的流程图,但箭头可乱飞

图形工具

N-S 图(盒图)

强制结构化,消除乱跳

图形工具

IPO 图

从 I→P→O 视角看模块

图形工具

问题分析图 PAD

适合嵌套和层次关系

图形工具

判定树

树形表达复杂条件判断

表格工具

判定表

多条件多组合不遗漏

语言工具

过程设计语言 PDL

伪代码,灵活且可逐步求精

讲到这里,我们应该已经掌握了"设计单个流程"的工具箱。但一个真实系统往往有几十上百个流程——谁来管理这些流程之间的协调?

4、当流程变多——工作流管理系统(WFMS)

工作流管理系统(WFMS)就是为了解决"流程多、流程乱"而生的。

它的定义:

WFMS 通过软件定义、创建工作流并管理其执行。它运行在一个或多个工作流引擎上,这些引擎解释过程定义、与工作流参与者相互作用,并根据需要调用其他 IT 工具或应用。

三个核心功能:

工作流建模→ 定义活动和规则,把现实业务过程映射为可执行的模型。

工作流执行→ 创建和运行实际的工作流实例。

业务过程管理与分析→ 监控、管理、优化执行中的业务流程。

举个栗子:如果"流程设计工具"是画图纸的,那么 WFMS 就是拿着图纸去建造和运营整条生产线的

5、数据怎么进、怎么出?输入输出设计

流程设计解决了"数据怎么被加工",现在要解决的是:数据从哪进来、加工完送到哪去

5.1 输入设计:控制"数据入口"

输入是系统与外部世界交互的第一道防线。输入设计遵循7 大原则

原则

核心关注点

确定输入数据的类型和格式

文本/数字/图像?整数/浮点/JPEG?

确定输入数据的来源

用户手工输入?传感器采集?外部系统推送?

设计良好的输入界面

布局、控件选择、输入提示、错误提示

设计系统输入验证机制

验证规则、错误提示、安全性校验

设计输入处理流程

数据清洗、格式转换、去重去噪

设计输入存储方案

存储方式、存储结构、存储安全

设计输入安全机制

访问控制、数据加密、防 SQL 注入

这 7 条原则构成了一条防线:从"识别输入"到"验证输入"到"处理输入"到"安全存储输入"

5.2 输出设计:让结果"可读、可用、可靠"

输出设计的逻辑更简洁,共三步:

第一步:确定输出内容(用户要什么?)。

第二步:选择输出设备与介质(显示终端?打印机?PDF?API?)。

第三步:确定输出格式(报表?图形?JSON?)。

同时,输出设计也有7 项原则,可以直接对照输入原则来理解:

原则名称

核心要求

简洁性原则

避免冗余信息与复杂设计,风格简洁明了

一致性原则

保持设计风格与交互方式一致

可用性原则

关注用户体验,让系统便捷、易用、可靠

可访问性原则

考虑不同用户的需求与能力

可维护性原则

易于系统维护与升级

安全性原则

重视系统安全性与保密性

可扩展性原则

灵活适应不同需求的扩展

6、人与系统的对话——人机交互设计

有个最直观的问题:用户怎么用这个系统?

人机交互设计的终极目标就三条:

  1. 切实满足用户需求— 功能有用、内容齐全,对用户有帮助
  2. 产品易上手使用— 操作、理解、学习难度低
  3. 降低错误率与学习成本— 让用户轻松掌握系统

设计良好人机交互有十个方法要点:

步骤/要点

具体内容

1. 了解用户

用户群体划分、需求调研、使用场景分析、竞品分析

2. 设计交互界面

采用简单、自然、统一的操作方式,降低学习与操作成本

3. 即时反馈机制

用户操作后系统需及时反馈,增强交互感与确定性

4. 辅助功能

为视、听、肢体障碍用户提供适配功能,保障无障碍使用

5. 用户测试

通过实际用户使用验证,发现交互设计问题

6. 迭代优化

基于测试结果持续改进,逐步提升体验

7. 多语言支持

覆盖不同语言用户,拓展使用范围

8. 结合实际场景

让交互设计贴合真实使用环境,提升实用性

9. 适度动画效果

合理动画增强交互趣味性与引导性,不过度冗余

10. 引入新理念技术

应用创新理念(如极简交互)和新技术(如手势/语音交互)

← 返回列表