2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

架构设计原则的力量

  • 2017-01-19
  • 本文字数:2469 字

    阅读完需:约 8 分钟

这篇文章先是出现在 IEEE Software 杂志上,IEEE Software 是一本提供严谨科技资讯的杂志。企业总是在可靠性和灵活性上面临挑战,IT 经理和技术领导者依赖 IT 专家们来提供高超的解决方案。

本文要点

  • 架构原则确保设计决策在一定程度上能够满足需求
  • 借助架构原则,可以在没有微管理的情况下建立边界和优先级
  • 好的架构原则具有建设性,是合理的、良好定义的、可测试的,并且是重要的
  • 偶尔会发生架构原则被破坏的情况,这时我们必须找出原因,因为这是一个改进架构原则的好时机
  • 在架构原则的开发、捕捉和沟通上投入适当的时间有助于理论与实践之间的融合

人们经常会谈论系统的“架构设计原则”(或者直接叫“架构原则”)。不过在对“原则”进行清晰地定义之前,它所表示的意思还是很含糊的。对架构设计原则的角色和好处进行良好的定义,它将成为一个强有力的工具。

在这篇文章里,我将对架构设计原则做出定义,并探讨什么才是好的原则,以及如何在实际当中使用这些原则,从而能够从中获得价值。

原则的定义

我不打算对设计和架构这两者做任何刻意的区分,因为我认为在这里对它们进行区分没有任何意义。因此,我将会谈论一些设计原则,它们同时适用于细节层面和抽象层面。

牛津英语词典把原则描述为“一种基本的事实或主张,它是信念或行动的基础”,而设计是“一种计划或草稿,它展示了一栋建筑、一套服装或其它物体在成形之前的外观和功能或运行方式”。所以,我们可以把软件的设计原则定义为:

一种基本的事实或主张,它是决定软件系统运行方式的基础。

重点是,原则清晰地描述了意图,能够为设计工作提供指导。还有其它一些对设计原则的定义。在《Architecture Principles》[参考 1] 这本书里,Danny Greefhorst 和 Erik Proper 对设计原则给出了最具概括性的定义:

一个声明性的陈述,对人为事物的设计属性进行规范的定义,确保它们能够满足必要的需求

虽然这样的定义有些抽象,不过它至少澄清了设计原则的角色,它确保架构能够在一定程度上满足需求。

在进行抽象的定义之后,我们来看看真实的架构原则是什么样的。下面的表格展示了一个简单的架构原则,它是来自银行领域的一个真实案例。简单地说,这个原则:

  • 提供了一个名字
  • 给出了一个简洁清晰的描述
  • 清楚地解释了原则背后的动机
  • 定义了它所适用的领域(适用于特定类型的应用程序的消息服务,这些应用程序包含了特定的数据类型)
  • 解释了这个原则的重要性,这样我们就可以选择合适的时机应用它

(点击放大图像)

对于设计过程来说,这样的输入是很有用处的,因为它强调了组织的优先级事项,并解释了原则的重要性,以及何时会变得重要。

架构原则的好处

架构原则概括了架构的功能:为系统设计清晰地定义必需的约束,而不必按照惯例定义所有的设计细节。我在之前的一个专栏文章里提到,架构就是要处理好系统组件之间的关系[参考2]。所以,架构原则有助于建立边界和优先级,不需要关心系统的每个组件是如何工作的。好的架构原则可以为我们带来如下的好处。

为设计决策提供基础

原则能够澄清优先级和约束,从而帮助人们做出可靠的设计决策。事实上,我发现架构原则可以让一些抽象的想法更易于理解,比如业务目标,同时它们能够帮助设计者做好技术决策。以后我会在新的专栏文章里深入探讨这个话题。

为决策、成本和时间提供依据

作为设计者,我们经常要面对一些情况,比如最终的计划总是比我们所预期的要占用更多的成本或时间,但我们却很难解释清楚为什么这个计划是正确的。有了清晰定义的原则,我们就能够解释这个问题。例如,系统必须支持高可用部署这个原则就可以解释为什么我们要为系统构建多节点运维能力,尽管这样做不是最省钱的方案。

增强合作、沟通和公共价值

跟其它架构元素一样,架构原则必须在组织层面进行,而不是在个人层面。这样可以确保这些原则在早期就得到验证,并且让组织感觉到它们是属于集体的。而且,这样有助促进人们之间的合作,并建立公共价值,培养人们在区分事项重要性方面的共识。

定义优秀的架构原则

要定义好架构原则并不容易。给出一个浅显或凌乱的列表很容易,它们可能缺乏可操作性,以致于无法应用到实际当中。要定义有价值的原则并不容易。

我的长期合作伙伴Nick Rozanski 列出了优秀架构原则所要具备的一些特点[参考3],如下表。要达到这些标准需要付出一定的努力,不过这样所能得出的原则是很有价值的,它们提供了重要的具有可操作性的行动指南。

(点击放大图像)

什么时候可以违背原则

原则是用来指导设计并达成一致性的。不过有时候架构原则会遭到破坏,因为人们意识不到它们的存在(这种情况很普遍),而有时候人们会忽略它们(如果是这种情况,你一定要找出背后的原因)。

破坏原则需要付出代价,而且通常是长期的代价。所以,如果有人违反了原则,必须给出正当的理由。当发生这种情况时,你必须搞清楚破坏原则所能得到的好处能够抵消它所造成的损失。

遭到破坏的架构原则也会给架构师带来有用的信息。首先,被破坏的原则正好反映了系统设计在某些方面的重要性。其次,如果破坏原则是有正当的理由,那么说明理论和现实之间存在不匹配,我们必须予以纠正。最后,在知道了破坏设计原则所对应的系统点之后,我们就可以在系统演化时有针对性地处理这些点。

虽然人们经常谈论他们系统的架构原则,不过他们经常叫不出它们的名字,也无法解释其中的原理。在系统的生命周期中,特别是在早期阶段,识别、讨论、捕捉和沟通设计原则是非常重要的。这个过程很难,不过最终的结果有助于让理论和实际保持一致。

参考

  1. D. Greefhorst 和 E. Proper 合著的《Architecture Principles: The Cornerstones of Enterprise Architecture》,由 Springer 出版,2011 年。
  2. E. Woods 的“Architecting in the Gaps: A Metaphor for Architecture Work”,IEEE Software 杂志,2015 年第 4 期,第 32 卷,第 3335 页。
  3. N. Rozanski 和 E. Woods 合著《 Software Systems Architecture》,第 2 版,Addison-Wesley 出版,2011 年。

关于作者

Eoin Woods是 Endava 的首席技术官。可以通过 eion.woods@endava.com 联系到他。

查看英文原文: Harnessing the Power of Architectural Design Principles

2017-01-19 16:165666
用户头像

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

关注

评论

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

关于Java微服务的打包问题

Java你猿哥

Java 微服务 SSM框架

好用的eval | python小知识

AIWeker

Python python小知识 三周年连更

聊聊实例化需求

老张

需求分析 实例化需求

2023年,人工智能和数据训练呈现哪些新趋势?

澳鹏Appen

人工智能 机器学习 数据标注

【重磅】针对小微企业信息安全,行云管家堡垒机隆重推出免费版

行云管家

云计算 企业上云 安全运维 运维安全

抛弃丑陋的try-catch,优雅处理异常

Java你猿哥

Java SSM框架 异常处理 try-catch

阿里云何川:计算巢产品规划与生态策略解读

云布道师

计算巢

好用的配置工具yaml | python小知识

AIWeker

Python python小知识 三周年连更

Alibaba微服务线上架构攻略,从实战到源码精讲

程序知音

Java 微服务 SpringCloud java架构 后端技术

Qz学算法-数据结构篇(引入)

浅辄

数据结构 三周年连更

OpenHarmony开发者大会举办,OpenHarmony项目群授牌30家捐赠单位及个人

最新动态

再获殊荣!华为云GaussDB喜提“科技进步一等奖”

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

【Linux】之如何卸载干净zabbix服务?(超详细)

A-刘晨阳

Linux zabbix 三周年连更

原生开发能不能动态化?移动端动态能力建设的流派有哪些?

没有用户名丶

迪斯克分投趣模式挖矿分红dapp系统开发功能详情

开发v-hkkf5566

工作两年才真正搞懂Spring的核心概念:spring基础框架及技术生态

Java你猿哥

Java spring Spring Boot spring框架 Spring核心

MySQL进阶之道,MySql性能实战源码+笔记+项目实战

程序知音

Java MySQL 数据库 后端

MySQL 主键自增也有坑?

江南一点雨

MySQL

600+ 道 Java面试题及答案整理(建议收藏)

Java你猿哥

Java spring 分布式 mybatis 多线程

MySQL中,当update修改数据与原数据相同时会再次执行吗?

Java你猿哥

Java MySQL SSM框架 update

同时斩获7大offer的终极原因,全靠这套Java笔记

程序知音

Java 后端 JVM java面试 Java面试八股文

105道Java面试题,认真思考对你面试很有价值

Java你猿哥

Java spring 面试题 java面试 Java面经

史上最全499道Java面试题:JVM+分布式+算法+锁+MQ+微服务+数据库

Java你猿哥

Java 架构 算法 JVM 多线程

云原生2.0网关API标准发展趋势

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

《一时重构一时爽,一直重构一直爽》

后台技术汇

代码重构 软件重构 三周年连更

聊聊 CSS 隐藏元素的 10 种实用方法

茶无味的一天

CSS 隐藏元素

Rainbond 结合 Jpom 实现云原生 & 本地一体化项目管理

北京好雨科技有限公司

Kubernetes 云原生 rainbond 企业号 4 月 PK 榜

综合清理优化工具:MacCleaner PRO激活版

真大的脸盆

Mac Mac 软件 清理工具 系统清理 优化软件

详解HTTP Keep-Alive选项说明及注意事项

阿泽🧸

keep-alive 三周年连更

最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发

Java你猿哥

Java spring JVM 多线程 myssql

景区共享电动车厂家如何找?投放前景如何

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电单车投放 共享电单车生产

架构设计原则的力量_架构_Eoin Woods_InfoQ精选文章