系统设计的三板斧——抽象、具象和演算

2022-08-15 19:03:25 浏览数 (1)

背景

对于技术来说,每一个系统都少不了最重要的一个环节,系统设计。

系统设计的成功与否直接决定了后续的系统开发能否成功。

这次的分享,我们将系统设计的方法简化为三板斧,简单易懂,居家旅行学习进修必备。

三包承诺:包记住,包理解,包会用。如有问题,请再看一遍。如想快速浏览,可以先看总结。

大纲

1 系统设计的基本流程

2 三板斧的招式

3 实例讲解,权限系统设计

4 总结

什么是系统设计

The process of defining the             定义(产出)

architecture,                  架构

components,                  组件

modules,                    模块

interfaces,                   接口

and data                    数据

for a system to satisfy specified requirements.   需求(目标)

1 系统设计的基本流程

1.1 软件开发流程

  • 1 需求分析
  • 2 概要设计
  • 3 详细设计
  • 4 系统开发
  • 5 系统测试
  • 6 软件交付

软件开发流程,详细内容可以参考: https://baike.baidu.com/item/软件开发流程

需求分析就是一个很专业的工作,对于大型的软件开发,也有专门的需求分析师,所以这里面的方法和流程也还有很多细分的内容,有兴趣的同学可以继续挖掘。

系统设计主要就是2、3两部分,大学毕业设计的时候,应该也都有深刻的印象,自己的文档是怎么写出来,怎么组织和编排的吧。

1.2 系统设计的流程

系统设计的内容可以用16或者32课时来专门开一课,大学时候应该也有这样的课,可能是选修吧。

详细内容可以参考: 从 0 到 1 教你设计业务系统 https://36kr.com/p/1722044334081

1.3 总结,系统设计的基本流程

上面的软件开发流程和系统设计流程,看着就很复杂,分工很细,要完全遵守这些方法来做互联网产品开发的话,很多人是无法想象的,2周上线,1天1个版本?

所以,上面的流程都是来自传统的企业软件开发方法。而传统软件的开发周期,最少也是半年、一年的周期,交付物也都会比较严格,也不会有持续迭代一说。

传统企业软件开发,有很多是外包公司,规模很大,类似富士康的工厂。而规模的基础就需要标准化,遵守各种认证体系的要求,这样也更能被企业认可和信任。

但是,这些流程、方法,对于我们互联网研发就很不合适,系统设计也是。所以,才有了本文的核心方法。

2 三板斧的招式

2.1 第一招:抽象,万物归一

1 人,主体对象

实体模型,数据结构

2 事,核心功能

组件模块,功能需求

3 物,资源要求

系统规模,开发周期,架构设计

宏观上的面,提炼和定义,不拘泥细节。

从繁杂的系统中剥离、提炼,抽象出来我们系统的核心,定义好系统的人、事、物,也就有了系统的大致样貌。

抽象,这是最重要的一步,也是最厉害的一招。

2.2 第二招:具象,有血有肉

1 数据结构设计

对象的属性,数据表

2 业务功能设计

功能模块,任务清单

3 系统架构设计

性能、并发、伸缩、扩展、安全

微观实现的点,为后续的编码扫平模糊。

系统设计在这一招完成后,基本上就要全面完工了,交付给开发来编码。如果这时候还有不清晰的地方,还有遗留的点,那么后续就会出现很严重的需求变更、技术变更、甚至重构,会严重影响项目开发的周期和质量。

具象,这是需要细致且耐心的一步,也是势大力沉的一招。

2.3 第三招:演算,活灵活现

1 业务流程

让功能细节发生互动(业务恋爱)

2 数据流程

让对象之间发生关系(数据怀孕)

3 模拟操作与系统预估

模拟的运转和系统压力评估(成长烦恼)

流程不通,操作不顺,系统瓶颈,及早发现和补充完善。

纯脑力运算的过程,可能是设计者来做,也可能是要系统相关人一起来做。

这里用时2小时或者一起开个会,把系统设计的方方面面都模拟的运转起来,各个环节,各个角色带入进来,发现问题马上调整前面的抽象和具象的设计。

演算是一个快速查缺补漏的环节,也是对系统设计进行方案优化、调整的最后环节,这里投入的每一分钟都是十倍百倍于后续研发阶段的调整时间效率。

演算,这是最容易忽略的一步,也是最难的一招。

2.4 总结,系统设计的三板斧

围绕系统设计中的人、事、物,我们通过宏观层面的抽象,提炼和定义出来核心内容,在通过微观层面的具象,把各个细节补充完善,最后,运用演算,让这个系统在我们的脑子里面活起来,重复这三板斧,完善我们的系统设计。

3 实例讲解,权限系统设计

介绍:权限系统管理着应用和服务之间的调用关系。应用要调用服务的接口,必须先申请对应的服务接口权限才可以。

3.1.1 抽象:权限系统的核心对象(主体)

1 主要对象

应用,服务

2 派生对象

接口,应用请求服务

权限,接口权限

3 外部对象

网关,系统平台,第三方服务等

提炼权限系统内部的主体对象,确定系统的数据模型。

3.1.2 抽象:权限系统的核心功能(硬性)

1 权限相关功能

应用端申请,服务端审批,查询

2 后台管理功能

服务信息和扩展权限的配置

3 扩展功能

消息通知,权限推送

定义必须的应用的全后端功能,扩展的与外部系统的交互功能。

3.1.3 抽象:权限系统的资源要求(软性)

1 权限的管理系统,不涉及权限验证

系统并发量很有限,性能要求低

2 平台内应用、服务的权限依赖度高

系统的安全和稳定性高

3 内部和外部服务的权限定义差别大

扩展性要求高

系统的架构设计不必过于复杂,保证应用程序的安全和稳定性,定义好系统的可扩展性。

3.2.1 具象:权限系统的数据结构

应用相关

服务相关

接口相关

申请相关

审批相关

标准字段

2 服务配置表 tb_paas

服务信息

推送相关

外部相关

扩展相关

标准字段

3 操作日志表 tb_log

数据模型

新旧数据

标准字段

3.2.2 具象:权限系统的业务功能

细化每一个功能的处理过程,要结合交互页面,操作流程,数据输入和产出等。

3.2.3 具象:权限系统的系统架构

1 分层模型,前后端分离

前端展现和交互,后端数据和逻辑,前后端耦合度低

2 服务的权限订阅和推送,预留第三方服务和扩展权限

定制化多端推送,扩展能力强

3 多机分布式,定时任务更新权限和通知

资源伸缩性强

**架构演化:**单机 -> 分布式,单库 -> 主从库 -> 缓存层 -> 数据分拆(水平、垂直) -> 应用分拆(微服务)

架构选择,只有合适与否,没有好坏之分。

3.3 演算:数据流程、业务流程和交互模拟

1 权限申请流程

方便查找服务,方便申请接口权限

2 权限审批流程

方便查找服务,方便申请接口权限

3 接口权限申请的状态变更

申请、审批和推送、通知,把开发者、服务方、网关、服务都串联起来

流程,让整个系统运转起来,是一个活的系统,不再是冷冰冰的数据结构和系统框架。

考虑开发者和服务方的用户,带入用户的立场和操作,更好地模拟整个系统的交互体验。

3.4 总结,实例讲解,权限系统设计

这里的实例比较简单,但毕竟是最近设计开发的一个系统。

而对于更加复杂的系统,方法还是互通的。

定义好,写下来,画下来,这就是一个系统设计和项目文档。

当然系统设计不仅仅是上面呈现出来的内容,还有关于接口,任务清单等内容。

4 总结,系统设计的三板斧

一句话形容,从宏观到微观,互动更长久。

抽象,先从宏观层面做好抽象;

具象,再从微观层面补充完善细节;

演算,全流程的模拟,查缺补漏;

重复上述三板斧,不断完善系统设计。

注意:不用纠结未知和差异化太大的部分。

系统设计的三板斧,相信不仅仅可以用在系统设计中,在其他的很多方面应该也是类似,比如:写作。

主题 -> 目标

创意 -> 抽象(人、事、物)

细节 -> 具象(有血有肉)

故事 -> 演算(活灵活现)

在最后,强调一遍,抽象和推理是数学的重要能力,数学绝对是极其重要的学科,掌握好数学,能够更好地掌握科学方法,而不仅仅只有个人的经验和直觉。

0 人点赞