Skip to Content
软件架构师速成指南
book

软件架构师速成指南

by Gregor Hohpe
May 2025
Beginner to intermediate
368 pages
3h 30m
Chinese
O'Reilly Media, Inc.
Content preview from 软件架构师速成指南

第 23 章 画线

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

没有线条的建筑可能不是建筑

A functional architecture of a car
汽车的功能结构

上面的草图描绘了 汽车的结构。所有重要的部件都在这里,包括它们之间的关系:发动机在引擎盖下;乘客座椅适当地位于乘客舱内,靠近方向盘;车轮很好地装配在汽车底盘的底部。这幅图似乎符合大多数建筑学的定义(除了我最喜欢的定义,因为我在寻找决策;见第 8 章)。

然而,这对了解汽车的功能却没有什么帮助:油箱离发动机很远,可以省略吗?发动机和变速箱并列在引擎盖下是巧合还是有特殊关系?汽车需要四个轮子还是三个轮子也可以?如果要分阶段制造汽车,先组装哪一部分比较合理?只组装带座椅的车厢是否是一个好的开始?如何区分好车和坏车?哪些方面是几乎所有汽车都有的(例如,车轮在底部),哪些方面各不相同(保时捷 911、大众甲壳虫或 DeLorean 的车主会很快指出他们的发动机不在引擎盖下面)?

这幅图并没有真正回答这些问题。它描绘了各部件的位置,但没有表达它们在整个系统 "汽车 "中的关系或功能。尽管这幅图在事实方面是正确的,实际上也相当详细,但它并不能让我们推理出它所描述的系统,尤其是它的行为。 巧合的是,它可能也不是图表驱动设计的好例子(第 22 章)。

请看这条线

图中缺少的关键元素是连接组件的线条。没有线条,就很难表现丰富的关系。线条是如此重要,以至于方框、标签和线条足以构成肯特-贝克半开玩笑的银河建模语言。1没有线条,就没有什么建模语言了。此外,正如人们常说的,"线条比方框更有趣"。通常是哪里出了问题?在两个经过充分测试的部件之间的整合中。我需要在哪里实现强耦合或松耦合?盒子之间。如何区分结构良好的架构和一团烂泥?2通过线条。

图 23-1 举例说明了线条的重要性。

Without lines, an architecture diagram is rather meaningless
图 23-1. 没有线条的架构图毫无意义

左边的系统和右边的系统由相同的组件ABCD 组成,这两个系统会有不同的属性和行为吗?左边的系统有一个整齐的分层架构,它提供了清晰的依赖关系,可以很容易地用不同的组件替换某个组件。但由于信息或命令必须依次通过每个组件,因此也会造成较长的延迟。此外,每个组件都可能成为单点故障:如果C出现故障,链条就会中断,系统就无法运行。

右边的系统几乎具有完全相反的特性:相互依赖关系有点混乱,因此很难更换组件。不过,该系统提供的通信路径更短,弹性更大:如果C出现故障,A仍可与D 通信。

例 23-1.

如果我看到一个没有线条的架构图,我会倾向于拒绝它,因为它无法表达系统的行为。

现在想象一下,这个图没有线条。你永远不会知道这个系统是像左边还是右边那样构建的,结果就是一个毫无意义的架构图。因此,如果我看到一张没有任何连接线的架构图,我就会怀疑它是否是对架构的有意义描述。 不幸的是,很多图都没有通过这一基本测试。

元模型

说 汽车图没有显示任何关系并不完全正确。这幅图确实包含了两个组件之间的主要关系:

遏制

一个盒子被另一个盒子包围。

邻近性

有些盒子彼此靠近,有些则相距较远。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

游戏化头脑风暴

游戏化头脑风暴

Dave Gray, Sunni Brown, James Macanufo
超越Vibe编程

超越Vibe编程

Addy Osmani

Publisher Resources

ISBN: 9798341658028