写点什么

开发者需要知道的有关软件架构的五件事

  • 2018-01-21
  • 本文字数:3003 字

    阅读完需:约 10 分钟

本文要点:

  • 因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要。
  • 在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上。
  • 好的架构师应该是团队的活跃分子,不仅能够进行代码协作,还能为团队提供技术指导。
  • 软件架构中的沟通环节极具挑战性。C4 模型对软件架构中的沟通环节进行了结构化,从一个上下文图表开始,再逐步深入到系统的各个技术层面。
  • 实际上,可以多花一些时间实现好的架构,好的架构能够带来敏捷。

2010 年,我写了一篇叫作“ Are You a Software Architect? ”的文章,探讨了软件开发者与软件架构师之间的区别,以及如何从一名软件开发者转成一名架构师。8 年过去了,软件行业也在发展,但开发团队仍然面临着类似的问题,特别是与软件架构有关的问题。这些问题比以往任何时候都要来得突出,因为我们现在构建的系统越来越趋于分布式化,开发团队也越来越分布式化。为了解开这些迷思,开发者需要了解以下五个与软件架构有关的事实。

1. 软件架构不只是前期的“大设计”

传统的观点认为,软件架构就是在前期进行“大设计”,然后通过瀑布模型进行交付,架构团队要确保软件的每一个元素在进行编码之前都要考虑妥当。2001 年,“敏捷开发宣言”建议我们“拥抱变化而不是遵循计划”,但这个观点后来却被误读成不应该制定任何计划。结果就是,有些开发团队直接从原先的“大设计”变成了零设计。这两种极端的行为都愚蠢至极,实际上,在某个时候,你会发现前期的设计并非开发出完美软件的必要因素。前期的设计应该只是一个起点,或是作为团队前进方向的指引。

在进行软件设计时需要做出一些设计决策。在谈及软件架构和软件设计之间的区别这个问题时,Grady Booch 说,“架构代表了重要的决策,决策的重要程度通过变更成本来衡量”。换言之,就是看在后续进行变更时那个决策需要付出更大的成本。所以,好的前期设计就是要充分理解什么是“重要的决策”。这些决策通常与技术选型和结构(也就是分解策略、模块化、功能边界等)有关。如果开发的是一个单体系统,那么选择何种编程语言可能就变得尤为重要。如果采用的是微服务架构,那么使用何种编程语言就变得不那么重要,但需要考虑其他方面的因素。类似的,如果采用了六边形架构,虽然可以将业务逻辑与技术选型解耦开来,但仍然需要做出其他方面的权衡。

所以说,前期设计就是要了解影响软件成型的重要决策,而不是具体的技术细节,比如数据库的某个列要设置多大的长度。在现实当中,我会让团队真正去了解他们将要做什么、如何去做以及他们已经设计好的东西是否可行。可以让他们识别出最高优先级的任务,如果有必要可以写出代码。总而言之,前期设计就是一个叠加成功几率的过程。

2. 每个开发团队都需要进行软件架构

上述的内容适用于每一个开发团队,从一个单人团队到数百人的分布式团队。设置起点和方向其实就是要建立技术领导力。如果做不到这一点,就可能出现混乱:结构混乱的代码库(典型的“大泥球”),难以理解,难以维护,质量不达标,如性能、伸缩性或安全性。简而言之,任何一个开发团队都需要技术领导力。

3. 软件架构师要会写代码、指导他人以及参与协作

在大部分人看来,软件架构师就是给开发团队下达指令的人,就像接力赛中跑第一棒的人。但事实不是这样的,现代的架构师喜欢编码、指导他人并参与协作。我所遇见的好架构师也都是好的开发者,他们仍然喜欢编码,最起码他们并不想放弃编码工作。因为变化太快,人们很容易就与技术失之交臂。但我认为软件架构师应该是“建筑大师”,在必要的时候他们仍然可以写代码。作为团队的一份子,编码会让架构师的工作变得更容易一些,因为编码有助于架构师理解系统,而且团队的其他成员会真正把架构师当成是同事。

需要注意的是,软件架构师不一定要指定某个人来担任。刚开始可以这样做,但其实也可以由多个人共同承当这个角色。 但要注意,建立协作式的技术领导力并不是件轻而易举的事。软技能本来就不是很轻松就能获得的。我曾经组建 2 到 5 个人的架构师小组,让他们来设计软件系统,但他们在与技术和设计决策方面无法达成共识。在极端情况下,个性冲突会导致小组解散。关键是要了解你的团队,并确保应用了恰到好处的技术领导力。

4. 使用 UML 不是必需的

传统的软件架构通常包含大量的 UML 模型图,试图充分展现软件系统的每一个细节。可惜的是,建模和 UML 在很大程度上与前期“大设计”相耦合,而这些技术在近几年已经过时了。现在完全不懂 UML 的软件开发团队比率在逐步上升。

现如今,大部分人只是“在白板上画几个方块和线条”,并将其作为沟通想法的手段。在过去几年,我参与过的软件架构小组画过大量这样的图表,我把它们拍成照片,有好几个 G。我敢说,从行业角度来讲,我们已经散失了软件架构的沟通能力。我见过不计其数的图表,它们有些是随机着色方块和线条的组合,模糊不清,难以辨认。如果一个团队无法就软件架构进行沟通,那么就无法设置起点和建立技术领导力。

我建议使用“C4 模型”来进行软件架构方面的沟通——上下文(Context)、容器(Containers)、组件(Components)和代码(Code)。其本质是创建一系列结构化、可伸缩的图表来描述软件系统。为每一个软件系统创建一个上下文图表,用于描述软件系统与真实世界之间的关系。然后放大系统边界,让内部的容器突显出来——容器就是可部署、可运行的实体,比如运行在浏览器上的单页应用、服务器端的 Web 应用、微服务、数据库实例,等等。如果有必要,可以再将每个容器放大,让容器内部的组件突显出来。最后,你也可以放大组件,让代码级别的元素(类、接口、函数、对象等)也突显出来。C4 模型独立于具体的表示方法,虽然我倾向于使用简单的“方块和线条”,但使用 UML 来表示也是可以的。

c4model.com 提供了更多的信息、视频、示例图表和工具链接。如果你的团队正纠结于软件架构沟通方面的问题,那么可以看看这些资料。

5. 好的软件架构是敏捷的

现在仍然存在一种误解,认为“架构”和“敏捷”之间是一种竞争和冲突的关系。但其实不是的。相反,好的软件架构也是敏捷的,它有助于应对业务变更,不管是需求变更、业务流程变更还是混合变更。当然,什么才是“好的架构”仍然有待商榷,但我认为,好的架构与好的模块化息息相关。如果你曾经有过在“大泥球”上进行变更的痛苦经历,那么你就会知道,好的代码库结构(好的模块化)是多么的重要。

现如今,很多团队都存在一个很大的问题,他们采用了一种叫作“架构中立的设计”,George Fairbanks 在他的“ Just Enough Software Architecture”一书中对此进行了描述。换句话说,他们采用了一种不需要考虑权衡因素的架构风格。在现实中,开发团队使用微服务架构代替单体代码库。但实际上,他们有可能是创建出了一种“分布式的大泥球”,可见软件设计和分解过程是多么的重要,不管是要构建一个单体还是一个微服务架构的系统。敏捷和好的软件架构不是那么容易就能实现的,它需要一些精巧的设计,也需要作出一些权衡。这也再次说明为什么设置起点和建立技术领导力是如此的重要。

关于作者

Simon Brown 是一个独立的软件架构顾问,同时是“Software Architecture for Developers”一书的作者。他还是 C4 软件架构模型的创立者。Simon 是国际软件开发大会的演讲常客,并周游世界,帮助企业促进软件架构方面的工作。

查看英文原文 Five Things Every Developer Should Know about Software Architecture

2018-01-21 17:126621
用户头像

发布了 322 篇内容, 共 139.4 次阅读, 收获喜欢 145 次。

关注

评论

发布
暂无评论
发现更多内容

重磅!华为中国政企明确要把服务打造成为核心竞争力

新消费日报

Downie 4 for Mac v4.7.26中文最新版 苹果视频下载器

理理

Downie 4许可证 Mac视频下载器 Downie 4 下载 Downie 4 Mac版

MacDroid mac中文破解版:实现苹果设备与安卓设备数据传输

理理

数据传输 Mac软件 MacDroid中文 MacDroid mac破解版

实战从零开始实现Raft|得物技术

得物技术

分布式 raft 企业号2024年7月PK榜

飞天发布时刻:大数据AI平台产品升级发布

阿里云大数据AI技术

人工智能 大数据 MaxCompute EMR PAI

Bartender 4 for Mac(应用图标管理工具)v4.2.25中/英直装版

理理

Mac软件 Bartender 4 菜单栏应用图标管理

最好用的markdown写作工具Ulysses for Mac中文直装版

理理

markdown Markdown文本编辑器 Ulysses中文版 Ulysses破解版

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

测试人

软件测试

我叫小舞,跳舞的舞!新斗罗大陆游戏详细图文架设教程

echeverra

斗罗大陆

Enfocus PitStop Pro:PDF编辑与印前检查的一站式解决方案

理理

Enfocus PitStop Pro 2021 PDF 编辑器和注释器

macOS Ventura 13.6.9 (22G830) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO ventura

技术同学如何应对降薪裁员

老张

职场 裁员 认知 互联网裁员

一站体验沉浸式非遗音乐,华为音乐结合空间音频打造文化潮流专区

最新动态

休闲手棋游戏:大富翁 10 for Mac 中文原生版可联机

你的猪会飞吗

Mac游戏下载 Mac破解软件 Mac软件下载站

Embedding空间中的时序异常检测

百度Geek说

安全 异常检测

永久激活版Trapcode Particular AE 3D粒子插件详细安装教程

理理

云图说|一图告诉你主机安全的运维效率如何提升超出预期

华为云开发者联盟

运维 主机安全 新版本 企业号 8 月 PK 榜 2024企业号8月pk

​MES系统如何精准采集与对接设备数据,全面优化设备管理

万界星空科技

数据采集 mes 设备管理 万界星空科技 设备能源管理

专题 | IAM业界热度不减,2024市场持续井喷(一)

芯盾时代

身份安全 iam 统一身份认证 零信任

Reflector 3:将iPhone、iPad、iPod Touch屏幕投屏到mac电脑上

理理

Mac软件 iOS投屏 Reflector 3激活版 Reflector 3下载

iMovie 剪辑 for mac中文版:创建好莱坞风格预告片和精美影片

理理

视频特效 Mac视频剪辑软件 iMovie 剪辑

商品搜索API的未来:1688阿里巴巴引领智能化电商新趋势

代码忍者

API 接口 API 文档 API 测试

MySQL 5.7 DDL 与 GH-OST 对比分析

vivo互联网技术

MySQL ddl GH-OST

告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验

汀丶人工智能

人工智能 大模型

图片降噪Topaz DeNoise AI中文版下载 Topaz DeNoise AI安装教程 含激活工具

理理

macOS Sonoma 14.6.1 (23G93) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO Sonoma

榜上有名!望繁信科技荣登2023中国最具商业潜力榜

望繁信科技

流程挖掘 流程智能 上海望繁信科技 中国现代企业服务

MES系统是什么?MES软件有什么用?

万界星空科技

制造业 生产管理系统 mes 万界星空科技 生产管理

Mac红巨星粒子插件:Red Giant Trapcode Suite 激活版

你的猪会飞吗

Mac软件 mac破解软件下载 mac插件下载

哪里有Termius中文安装包?Termius中文汉化破解资源分享

理理

SSH ssh客户端 Termius中文版 Termius使用教程

LED显示屏行业可突破的六大领域

Dylan

云计算 虚拟现实 LED显示屏 全彩LED显示屏 led显示屏厂家

开发者需要知道的有关软件架构的五件事_研发效能_Simon Brown_InfoQ精选文章