07 | 多维与视图:系统设计的思考维度与展现视图
胡峰
该思维导图由 AI 生成,仅供参考
大学上机械设计课程时学习了 “三视图” 。三视图是观测者从三个不同位置观察同一个空间几何体所画出的图形,是正确反映物体长宽高尺寸正投影的工程图,在工程设计领域十分有用。三视图也是精确的,任何现实世界中的立体物都必然能被 “三视图” 投影到二维的平面,有了这张图就能准确制作出相应的机械零部件。
但在软件设计领域,则有较大的不同,软件系统是抽象的,而且维度更多。20 世纪 90 年代,软件行业诞生了 UML(Unified Modeling Language): 统一建模语言,一种涵盖软件设计开发所有阶段的模型化与可视化支持的建模语言。
从 UML 的出现中就可以知道,软件先驱们一直在不懈地努力,使软件系统设计从不可直观感受触摸的抽象思维空间向现实空间进行投影。
UML 是一种类似于传统工程设计领域 “三视图” 的尝试,但却又远没有达到 “三视图” 的精准。虽然 UML 没能在工程实施领域内广泛流行起来,但其提供的建模思想给了我启发。让我一直在思考应该需要有哪些维度的视图,才能很好地表达一个软件系统的设计。
而在多年的工程实践中,我逐渐得到了一些维度的视图,下面就以我近些年一直在持续维护、设计、演进的系统(京东咚咚)为例来简单说明下。
一、组成视图
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
软件系统设计需要多维与视图的思考,类似于工程设计中的“三视图”,但在软件领域有更多的维度。文章介绍了系统设计的五个视图维度:组成视图、交互视图、部署视图、流程视图和状态视图。作者以京东咚咚系统为例,详细阐述了每个视图的重要性和应用场景。组成视图展示了系统由哪些子系统、服务、组件构成;交互视图表达了系统或服务与外部系统或服务的协作关系;部署视图关注系统的部署结构与环境;流程视图表达系统内部的功能和控制逻辑流程;状态视图展示系统内部管理的状态及状态的变迁转移路径。通过这些视图,读者可以更全面地了解软件系统的设计和实现,从而得到更成体系化的系统设计思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员进阶攻略》,新⼈⾸单¥68
《程序员进阶攻略》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(14)
- 最新
- 精选
- 转希望能够对上面视图的产出过程有个详细的分析 比如 模块是如何一步步抽取出来的 这中间有那些比较好的方式 有那些法则需要遵循
作者回复: 参考我另一篇《咚咚架构演进》的公开博文
2018-08-1713 - Starbug一口气读完5-7篇,被作者对软件开发的透彻理解折服了,拿建筑设计类比软件设计,尤其是三视图来引出如何明确定义一个软件,这种思考角度给我很大的启发,从公众号跟过来极客时间果然是值得的。 但是也有一个疑问,以我所在的游戏行业为例,游戏开发主要是开发具体的功能需求,整个游戏服务的架构(数据库、网络、分布式架构)都是基本固定的模式,由运维人员负责管理维护,在游戏开发时往往都是采用敏捷开发的方式,直接从策划需求开始实现功能代码。看了这3篇文章,对软件设计在思考层面似乎有了一些领悟,但又不知道该如何应用到日常的游戏开发中,不知道老师是否有什么建议? 另外,建议极客时间加个用户查看自己留言的功能,否则留言完都不知道去哪找。 继续补学习笔记: 1.机械设计的三视图 准确描述出一个机械零部件 2.如何准确描述一个软件 维度更多,更抽象 UML(unified modeling language),统一建模语言,尝试做一个用来描述软件三视图的工具,但没能流行起来 3.组成视图:描述系统由哪些子系统、服务、组件部分构成 按功能划分,用于了解系统结构与分工 功能单一化:每个模块负责且只负责一个功能 功能正交化:每个功能由且仅有一个模块提供 4.交互视图 表达系统或服务之间的依赖与协作关系,在设计时用来确定模块划分是否合理,开发时以此来确定接口和交互细节 5.部署视图 确定服务、中间件,网络等。可以用来确定IO瓶颈等,并定义吞吐量和延迟要求。 6.流程视图:类似UML的序列图 7.状态视图: 状态是业务的核心,状态转移过程就是业务逻辑。 无状态业务,有状态业务,对代码的要求是不一样的。
作者回复: 游戏开发我几乎没有经验,不敢妄言。简单说下感想,游戏开发的这种模式可能是有其业务特性决定的,一般来说大部分的游戏很难上到一定规模,对技术架构形成挑战。而上规模的游戏,有些是通过分服,分区在运维层面就解决了。游戏模式不太可能产生千万上亿的人群在一个场景下去集体行为,比如电商的促销秒杀,社交应用的热点事件
2018-09-2324 - 于曦程能介绍下好用的画图工具吗,特别是Linux或Mac上
作者回复: Mac Keynote画的,后面有一篇专门讲画图技法的
2018-08-174 - June Yuan您非常善于从普通概念出发进行深入思考,看到更加本质的东西。UML 我当时完全是当成一块孤立内容进行学习的,好像横空出世,跟计算机专业其他基础课也不搭边,更不用说能看出来它和三视图的关系🙃
作者回复: 触类才会旁通嘛😊
2018-08-183 - All Ive Ever Known针对微服务化,我认同前三者视图。流程和状态感觉是前三者组合衍生出来的,核心还是前三者。 1.组成视图,用以理清系统功能。 2.交互视图,用以分析服务间依赖,看看是否拆分错。这个涉及到架构设计中,中纬度设计是否合理。 3.部署视图。用以关注服务,中间件,使用端之间的网络传输,确定IO瓶颈。这个涉及到架构设计中的高纬度设计是否合理。
作者回复: 流程和状态是服务内部的视图,比较复杂的业务画出来会清晰一些
2018-09-062 - 千年孤独老师,这些视图都是用什么工具画的?能推荐一下吗?
作者回复: 好像回复过一个同样的问题了,看看其他留言
2018-08-1722 - jacky这篇文章质量非常高,干货。
作者回复: 🤝^_^
2018-10-161 - 云学我们公司的架构设计文档还包含用例Case
作者回复: 用例不该是需求文档嘛😂
2018-08-211 - java小霸王感觉和4+1视图很像,但缺少了个场景视图,use case2022-04-14
- Sch0ng把中学三维图描述三维物体的思想迁移到软件工程中描述软件系统的思想很妙。 根据自己的经验归纳总结出的五类图,即成体系又很巧妙,爱了爱了。 系统由哪些组件组成、组件之间的依赖被依赖关系(组件的排布)、组件之间的逻辑交互、组件之间交互的状态(快照)、部署,是否有种似曾相识的感觉,定义集合,集合上有哪些运算,集合之间有哪些运算,集合运算的步骤是什么,集合运算的具体步骤,用啥做集合运算。 有状态的服务比无状态的服务复杂很多,在系统设计的时候尽可能控制状态的感染范围。2021-02-25
收起评论