极客时间07|多维与视图:系统设计的思考维度与展现视图2018-08-17胡峰大学上机械设计课程时学习了“三视图”。三视图是观测者从三个不同位置观察同一个空间几何体所画出的图形,是正确反映物体长宽高尺寸正投影的工程图,在工程设计领域十分有用。三视图也是精确的,任何现实世界中的立体物都必然能被“三视图”投影到二维的平面,有了这张图就能准确制作出相应的机械零部件。但在软件设计领域,则有较大的不同,软件系统是抽象的,而且维度更多。20世纪90年代,软件行业诞生了UML(UnifedModelingLanguage):统一建模语言,一种涵盖软件设计开发所有阶段的模型化与可视化支持的建模语言。从UML的出现中就可以知道,软件先驱们一直在不懈地努力,使软件系统设计从不可直观感受触摸的抽象思维空间向现实空间进行投影。UML是一种类似于传统工程设计领域“三视图”的尝试,但却又远没有达到“三视图”的精准。虽然UML没能在工程实施领域内广泛流行起来,但其提供的建模思想给了我启发。让我一直在思考应该需要有哪些维度的视图,才能很好地表达一个软件系统的设计。而在多年的工程实践中,我逐渐得到了一些维度的视图,下面就以我近些年一直在持续维护、设计、演进的系统(京东咚咚)为例来简单说明下。一、组成视图组成视图,表达了系统由哪些子系统、服务、组件部分构成。2015年,我写过一篇关于咚咚的文章:《京东咚咚架构演进》。当时我们团队对系统进行了一次微服务化的架构升级,而微服务的第一步就是拆分服务,并表达清楚拆分后整个系统到底由哪些服务构成,所以有了下面这张系统服务组成图。如下图示例,它对服务进行大类划分,图中用了不同的颜色来表达这种分类:07|多维与视图:系统设计的思考维度与展现视图胡峰-00:00/08:32极客时间组成视图示例每一类服务提供逻辑概念上比较相关的功能,而每一个微服务又按照如下两大原则进行了更细的划分:单一化:每个服务提供单一内聚的功能集。正交化:任何一个功能仅由一个服务提供,无提供多个类似功能的服务。如上,就是我们系统的服务组成视图,用于帮助团队理解整体系统的宏观组成,以及个人的具体工作内容在整个系统中的位置。了解了服务的组成,进一步自然就需要了解服务之间的关系与交互。二、交互视图交互视图,表达了系统或服务与外部系统或服务的协作关系,也即:依赖与被依赖。由于咚咚系统的业务场景繁多,拆分出来的服务种类也比较多,交互关系复杂。所以可以像地图一样通过不同倍率...