程序员进阶攻略
胡峰
京东成都研究院技术专家
立即订阅
7493 人已学习
课程目录
已完结 65 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 程序行知:走在同样的路上,遇见自己的风景
免费
征途:启程之初 (4讲)
01 | 初心:为什么成为一名程序员?
02 | 初惑:技术方向的选择
03 | 初程:带上一份技能地图
04 | 初感:别了校园,入了江湖
修炼:程序之术 (10讲)
05 | 架构与实现:它们的连接与分界?
06 | 模式与框架:它们的关系与误区?
07 | 多维与视图:系统设计的思考维度与展现视图
08 | 代码与分类:工业级编程的代码分类与特征
09 | 粗放与精益:编程的两种思路与方式
10 | 炫技与克制:代码的两种味道与态度
11 | 三阶段进化:调试,编写与运行代码
12 | Bug的空间属性:环境依赖与过敏反应
13 | Bug的时间属性:周期特点与非规律性
14 | Bug的反复出现:重蹈覆辙与吸取教训
修行:由术入道 (24讲)
15 | 根源:计划的愿景——仰望星空
16 | 方式:计划的方法——脚踏实地
17 | 检视:计划的可行——时间与承诺
18 | 评估:计划的收获——成本与收益
19 | 障碍:从计划到坚持,再到坚持不下去的时候
20 | 执行:从坚持到持续,再到形成自己的节奏
21 | 信息:过载与有效
22 | 领域:知识与体系
23 | 转化:能力与输出
24 | 并行:工作与学习
25 | 时间:塑造基石习惯(上)——感知与测量
26 | 时间:塑造基石习惯(下)——切割与构建
27 | 试试:一种“坏”习惯
28 | 提问:从技术到人生的习惯
29 | 偏好:个人习惯的局限与反思
30 | 写作:写字如编码
31 | 画图:一图胜千言
32 | 演讲:表达的技术
33 | 定义:阶梯与级别
34 | 晋升:评定与博弈
35 | 关系:学徒与导师
36 | 核心:安全与效率——工程技术的两个核心维度
37 | 过程:规模与协作——规模化的过程方法
38 | 思维:科学与系统——两类问题的两种思维解法
徘徊:道中彷徨 (15讲)
39 | 职业倦怠:如何面对?
40 | 局部最优:如何逃离?
41 | 沟通之痛:如何改变?
42 | 技术停滞:如何更新?
43 | 无法实现:困扰与反思
44 | 完成作品:理想与现实
45 | 代码评审:寄望与哀伤
46 | 人到中年:失业与恐惧
47 | 该不该去创业公司?
48 | 该不该接外包?
49 | 技术干货那么多,如何选?
50 | 技术分歧,如何决策?
51 | 技术债务,有意或无意的选择?
52 | 选择从众,还是唯一?
53 | 选择工作,还是生活?
寻路:路在何方 (7讲)
54 | 侠客行:一技压身,天下行走
55 | 江湖路:刀剑相接,战场升级
56 | 御剑流:一击必杀,万剑归心
57 | 三维度:专业、展现与连接
58 | 三人行:前辈、平辈与后辈
59 | 三角色:程序员、技术主管与架构师
60 | 三视角:定位、自省与多维
蜕变:破茧成蝶 (3讲)
61 | 工作之余,专业之外
62 | 跨越断层,突破边界
63 | 成长蓝图,进化跃迁
结束语 (1讲)
尾声 | 始于知,终于行
程序员进阶攻略
登录|注册

07 | 多维与视图:系统设计的思考维度与展现视图

胡峰 2018-08-17
大学上机械设计课程时学习了 “三视图” 。三视图是观测者从三个不同位置观察同一个空间几何体所画出的图形,是正确反映物体长宽高尺寸正投影的工程图,在工程设计领域十分有用。三视图也是精确的,任何现实世界中的立体物都必然能被 “三视图” 投影到二维的平面,有了这张图就能准确制作出相应的机械零部件。
但在软件设计领域,则有较大的不同,软件系统是抽象的,而且维度更多。20 世纪 90 年代,软件行业诞生了 UML(Unified Modeling Language): 统一建模语言,一种涵盖软件设计开发所有阶段的模型化与可视化支持的建模语言。
从 UML 的出现中就可以知道,软件先驱们一直在不懈地努力,使软件系统设计从不可直观感受触摸的抽象思维空间向现实空间进行投影。
UML 是一种类似于传统工程设计领域 “三视图” 的尝试,但却又远没有达到 “三视图” 的精准。虽然 UML 没能在工程实施领域内广泛流行起来,但其提供的建模思想给了我启发。让我一直在思考应该需要有哪些维度的视图,才能很好地表达一个软件系统的设计。
而在多年的工程实践中,我逐渐得到了一些维度的视图,下面就以我近些年一直在持续维护、设计、演进的系统(京东咚咚)为例来简单说明下。

一、组成视图

取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员进阶攻略》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(11)

  • 转角的天堂
    希望能够对上面视图的产出过程有个详细的分析 比如 模块是如何一步步抽取出来的 这中间有那些比较好的方式 有那些法则需要遵循

    作者回复: 参考我另一篇《咚咚架构演进》的公开博文

    2018-08-17
    9
  • 于曦程
    能介绍下好用的画图工具吗,特别是Linux或Mac上

    作者回复: Mac Keynote画的,后面有一篇专门讲画图技法的

    2018-08-17
    4
  • Starbug
    一口气读完5-7篇,被作者对软件开发的透彻理解折服了,拿建筑设计类比软件设计,尤其是三视图来引出如何明确定义一个软件,这种思考角度给我很大的启发,从公众号跟过来极客时间果然是值得的。
    但是也有一个疑问,以我所在的游戏行业为例,游戏开发主要是开发具体的功能需求,整个游戏服务的架构(数据库、网络、分布式架构)都是基本固定的模式,由运维人员负责管理维护,在游戏开发时往往都是采用敏捷开发的方式,直接从策划需求开始实现功能代码。看了这3篇文章,对软件设计在思考层面似乎有了一些领悟,但又不知道该如何应用到日常的游戏开发中,不知道老师是否有什么建议?
    另外,建议极客时间加个用户查看自己留言的功能,否则留言完都不知道去哪找。

    继续补学习笔记:
    1.机械设计的三视图
    准确描述出一个机械零部件
    2.如何准确描述一个软件
    维度更多,更抽象
    UML(unified modeling language),统一建模语言,尝试做一个用来描述软件三视图的工具,但没能流行起来
    3.组成视图:描述系统由哪些子系统、服务、组件部分构成
    按功能划分,用于了解系统结构与分工
    功能单一化:每个模块负责且只负责一个功能
    功能正交化:每个功能由且仅有一个模块提供
    4.交互视图
    表达系统或服务之间的依赖与协作关系,在设计时用来确定模块划分是否合理,开发时以此来确定接口和交互细节
    5.部署视图
    确定服务、中间件,网络等。可以用来确定IO瓶颈等,并定义吞吐量和延迟要求。
    6.流程视图:类似UML的序列图
    7.状态视图:
    状态是业务的核心,状态转移过程就是业务逻辑。
    无状态业务,有状态业务,对代码的要求是不一样的。

    作者回复: 游戏开发我几乎没有经验,不敢妄言。简单说下感想,游戏开发的这种模式可能是有其业务特性决定的,一般来说大部分的游戏很难上到一定规模,对技术架构形成挑战。而上规模的游戏,有些是通过分服,分区在运维层面就解决了。游戏模式不太可能产生千万上亿的人群在一个场景下去集体行为,比如电商的促销秒杀,社交应用的热点事件

    2018-09-23
    2
  • June Yuan
    您非常善于从普通概念出发进行深入思考,看到更加本质的东西。UML 我当时完全是当成一块孤立内容进行学习的,好像横空出世,跟计算机专业其他基础课也不搭边,更不用说能看出来它和三视图的关系🙃

    作者回复: 触类才会旁通嘛😊

    2018-08-18
    2
  • 千年孤独
    老师,这些视图都是用什么工具画的?能推荐一下吗?

    作者回复: 好像回复过一个同样的问题了,看看其他留言

    2018-08-17
    1
    2
  • 张飞洪
    这篇文章质量非常高,干货。

    作者回复: 🤝^_^

    2018-10-16
    1
  • All Ive Ever Known
    针对微服务化,我认同前三者视图。流程和状态感觉是前三者组合衍生出来的,核心还是前三者。

    1.组成视图,用以理清系统功能。
    2.交互视图,用以分析服务间依赖,看看是否拆分错。这个涉及到架构设计中,中纬度设计是否合理。
    3.部署视图。用以关注服务,中间件,使用端之间的网络传输,确定IO瓶颈。这个涉及到架构设计中的高纬度设计是否合理。

    作者回复: 流程和状态是服务内部的视图,比较复杂的业务画出来会清晰一些

    2018-09-06
    1
  • 云学
    我们公司的架构设计文档还包含用例Case

    作者回复: 用例不该是需求文档嘛😂

    2018-08-21
    1
  • 所以呢
    目前公司项目正在重构,我现在是在做各个组件的设计,非常实用
    2019-11-04
  • gkb111
    软件系统,如何去认识,
    组合,有哪些组成,分类
    交互,功能之间关系,
    状态图,不同状态来组成
    2019-06-05
  • 铁眉
    破UML,立自己的"三维图"。我想说其实是审美逼我们去找到更更美的表达方式
    2018-09-30
收起评论
11
返回
顶部