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 图关注的是这个模块对外的接口长什么样。④ 问题分析图PADPAD 由日立公司提出支持结构化程序设计包含五种基本控制结构执行顺序明确特别适合嵌套和层次关系的表示。什么时候选 PAD 而不是 N-S 图当你的逻辑有很深的嵌套if 里套 if 里套 whilePAD 的树形展开比 N-S 图的层层缩进更直观。⑤ 判定树当业务规则复杂到if A 且 B 则 Xif A 且 非B 则 Yif 非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 输出设计让结果可读、可用、可靠输出设计的逻辑更简洁共三步第一步确定输出内容用户要什么。第二步选择输出设备与介质显示终端打印机PDFAPI。第三步确定输出格式报表图形JSON。同时输出设计也有7 项原则可以直接对照输入原则来理解原则名称核心要求简洁性原则避免冗余信息与复杂设计风格简洁明了一致性原则保持设计风格与交互方式一致可用性原则关注用户体验让系统便捷、易用、可靠可访问性原则考虑不同用户的需求与能力可维护性原则易于系统维护与升级安全性原则重视系统安全性与保密性可扩展性原则灵活适应不同需求的扩展6、人与系统的对话——人机交互设计有个最直观的问题用户怎么用这个系统人机交互设计的终极目标就三条切实满足用户需求— 功能有用、内容齐全对用户有帮助产品易上手使用— 操作、理解、学习难度低降低错误率与学习成本— 让用户轻松掌握系统设计良好人机交互有十个方法要点步骤/要点具体内容1. 了解用户用户群体划分、需求调研、使用场景分析、竞品分析2. 设计交互界面采用简单、自然、统一的操作方式降低学习与操作成本3. 即时反馈机制用户操作后系统需及时反馈增强交互感与确定性4. 辅助功能为视、听、肢体障碍用户提供适配功能保障无障碍使用5. 用户测试通过实际用户使用验证发现交互设计问题6. 迭代优化基于测试结果持续改进逐步提升体验7. 多语言支持覆盖不同语言用户拓展使用范围8. 结合实际场景让交互设计贴合真实使用环境提升实用性9. 适度动画效果合理动画增强交互趣味性与引导性不过度冗余10. 引入新理念技术应用创新理念如极简交互和新技术如手势/语音交互