写点什么

讨论:烦人的细节

  • 2011-11-29
  • 本文字数:2104 字

    阅读完需:约 7 分钟

Bob 大叔和 Simon Brown 关于描述系统架构时基础架构(infrastructure)所起的作用展开了讨论。

在之前标题为 《尖叫的架构(Screaming Architecture)》的文章中,Robert Martin(也就是 Bob 大叔)阐述了这样的观点:软件产品的架构应该让所有人都很容易了解产品所要达到的目的,并且系统的架构应该反应系统的用例而不是它使用的框架:

架构不是(或者说不应该是)关于框架的内容。架构不应该由框架 _ 支持 _。框架是我们要使用的工具,而不是要符合的架构。如果你的架构基于框架,那么它就 _ 无法 _ 基于你的用例。

此外,好的架构应该让我们可以推迟那些不确定的,与框架、数据库、web 服务器等等相关的决定,Bob 大叔如是说:

好的架构让我们直到项目的 _ 后期 _ 才需要决定使用 Rails,或是 Spring,或是 Hibernate,或是 Tomcat,或是 MySql 等等。好的架构也让我们能够轻松地改变这些决定。好的架构强调的是用例,并把它与周边的关注点解耦。

Bob 大叔还谈到了互联网,想知道那是否也应该被认为是边缘关注点,并做出结论,网络也是一种“交付机制”:

网络是一种交付机制,你的应用程序架构应该这么来对待它。你的应用程序是否通过网络交付是一种 _ 细节问题 _,系统结构不应该取决于此。实际上,你的应用程序是否通过网络交付是你应该 _ 推迟 _ 考虑的事情。你的系统架构应该尽可能地与如何交付无关。你应该可以把它作为控制台应用程序、web 应用程序、富客户端应用程序、甚至是 web 服务应用程序来交付,而不需要让基本的架构过度复杂或者对其做出变更。

Bob 大叔文章的结论是:你的架构应该告诉读者与系统相关的内容,而不是你在系统中所使用的框架。

Simon Brown 是一位软件架构师,他对 Bob 大叔关于“交付机制”的观点发表了评论,称之为“烦人的细节”。他同意Bob 大叔所说的系统架构不应该是它所使用的框架,但是他还说到,他希望“看到软件架构能够落地,那就需要包括所选择的实现技术。” 关于推迟决定采用何种基础架构,Brown 说到:“如果我们需要做出某些关键的技术决定,那么肯定就需要完成,是吧?”,然后他问道:“如果我没有,或者不能推迟做出决定,那就一定意味着我拥有很差的架构吗? 我们难道不应该把推迟作为一种有意识的决定,而不是一种规则吗?”

Bob 大叔在从架构角度考虑的时候只关注系统的核心领域知识,而 Brown 的方法则与之不同,他认为“交付机制”当前是很大的一块工作,应该整合到总体架构之中,如下图所示:

Brown 的结论是:

对我来说,架构不仅仅是包含在“应用程序”中的内容。结构很重要,但是还有很多重要的内容,像非功能性需求、实际的交付机制(技术、框架、工具、API 等等)、基础架构服务(例如:记录日志、异常处理、配置等等)、集成服务(内部和外部的)、满足所有环境的限制(例如:运维和支持)等等。对我来说,所有这一切都与架构相关。

讨论并没有就此结束。Bob 大叔在另一篇博文《整洁的架构(Clean Architecture)》中对 Brown 的观点作出响应,他说,不管用户界面和数据库部分有多大,系统的架构都不应该面向这些“较大的元素”,并且“其他部分应该与之解耦”。他继续解释说,将核心领域知识与交付机制解耦非常重要,并说他不会特意地延迟和停止作出与框架相关的决定,但是架构师应该总是可以保持这两部分清晰地分离,即便这两项工作同时进行:

我曾经做出的更尖锐的关于架构的评论是,好的架构让你可以延迟做出一些重要的决定,像用户界面、框架、数据库等等。但有些人指出,客户不希望延迟用户界面方面的工作。DBA 也不希望延迟数据库方面的工作。在每次迭代完成的时候,他们都希望看到整个系统可以正常工作,包括用户界面、数据库和框架。他们不希望一次迭代只处理业务规则问题。事实上,好的敏捷实践特别要求对整体架构做“长而薄”的切分。

当然,我完全同意这一点。然而,“长而薄”的内容不需要同时进行。好的架构 _ 让你 _ 可以延迟做出重要的决定,它并不会 _ 强迫 _ 你延迟这些工作。然而,如果你 _ 可以 _ 延迟,那么就意味着你拥有更大的灵活性。例如,你可以在前面的几个 sprint 中创建临时的简单用户界面,然后再用更完备的用户界面来替换。

Bob 大叔做出结论说:“先处理这些烦人的小细节也没什么问题,只要你能够将业务规则与它们 _ 解耦 _。”

Brown 在对《整洁的架构》一文的回复中做出响应:他同意 Bob 大叔关于解耦的观点,但是在处理基础架构方面提出了不同的观点:“交付机制并非是可以延迟到‘世界末日’的烦人细节”,尽管 Bob 大叔坚持该工作是细节问题。Brown 的结论是:

  1. 将应用程序的代码和技术解耦很不错,而且是我们应该尽力做到的。这样得到的代码更易于做单元测试、易于替代、易于维护、易于修改等等。
  2. 软件架构是与全局相关的,而应用程序的代码只是全局中的一部分。
  3. 如果你仍然把“交付机制”这样的重要决定推迟,并且不考虑如何解决重要的非功能性需求和约束,那么就不得不面临软件项目失败的风险。

在讨论中,Bob 大叔和 Bronw 并不真的是处于对立的双方。他们都支持要清晰地分离核心领域知识与支持框架,但是前者更关注于领域知识,而后者认为还需要考虑并重视基础架构。你的方法是怎样的呢?

查看英文原文: Debate: The Annoying Detail

2011-11-29 07:213318
用户头像

发布了 340 篇内容, 共 142.1 次阅读, 收获喜欢 13 次。

关注

评论

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

云数据库 TiDB 试用体验总结

TiDB 社区干货传送门

版本测评

一次不兼容ddl导致的cdc问题

TiDB 社区干货传送门

故障排查/诊断

【2.24-3.3】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

图数据库认证考试 NGCP 错题解析 vol.02:这 10 道题竟无一人全部答对

NebulaGraph

图数据库

堡垒机有硬件吗?推荐使用硬件堡垒机吗?

行云管家

云计算 网络安全 云服务 堡垒机

【图解】白嫖阿里云价值3.3万的TiDB

TiDB 社区干货传送门

实践案例 管理与运维 扩/缩容 6.x 实践

天下武功唯快不破:TiDB 在线 DDL 性能提升 10 倍

TiDB 社区干货传送门

2023年2月中国网约车领域月度观察

易观分析

网约车 出行服务

头一次见!阿里牛人上传的600页JVM垃圾优化笔记飙升GitHub榜首

Java 性能优化 JVM 垃圾回收

数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年2月刊

墨天轮

MySQL 数据库 oracle postgresql 性能优化

面试官:在高并发情况,你是如何解决单用户超领优惠券问题的?

Java redis 高并发

平安银行与易观千帆签约合作,加速数字用户资产增长

易观分析

金融 银行

喜讯!华秋电子荣获第六届“高新杯”十大优秀企业奖

华秋电子

TIDB云数据库试用体验

TiDB 社区干货传送门

安装 & 部署 扩/缩容 6.x 实践

全局视角看技术-Java多线程演进史

京东科技开发者

jdk 多线程 Thread 企业号 3 月 PK 榜

TiDB Operator恢复持久卷上的备份文件

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 备份 & 恢复

NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询

TiDB 社区干货传送门

云数据库 TiDB 体验

TiDB 社区干货传送门

社区活动 6.x 实践

火山引擎DataTester:A/B实验如何实现人群智能化定向?

字节跳动数据平台

大数据 AB testing实战

基于Python+uiautomation的windowsGUI自动化测试概述

Python 自动化测试 unittest WindowsGUI UIaotumaiton

等保二级必须要上的设备有哪些?需要堡垒机吗?

行云管家

等保 堡垒机 等保二级

BSN-DDC基础网络详解(四):资金账户充值

BSN研习社

体验ChatGPT后,陷入沉思...

Openlab_cosmoplat

开源 行业趋势 ChatGPT

爱奇艺统一实时计算平台建设

Apache Flink

大数据 flink 实时计算

备战一年半,我们让最火的开源网关上了云

API7.ai 技术团队

api 网关 APISIX SaaS 平台

新兴应用场景层出不穷,电源管理芯片市场前景广阔

华秋电子

面试官:JVM是如何分配和回收堆外内存的?

Java JVM 垃圾回收

解决80%的工作场景?GitHub爆赞的Java高并发与集合框架,太赞了

Java 高并发 JUC JCF

Tapdata Cloud 基础课:新功能详解之「微信告警」,更及时的告警通知渠道

tapdata

数据库·

TiDB Operator备份TiDB集群到NFS持久卷

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 备份 & 恢复

云数据库TiDB试用初体验

TiDB 社区干货传送门

6.x 实践

讨论:烦人的细节_架构_Abel Avram_InfoQ精选文章