写点什么

Bob 大叔曰:架构在于目的而非框架

  • 2013-07-07
  • 本文字数:924 字

    阅读完需:约 3 分钟

“架构的核心是目的,而我们却把它变成了框架和细节”, Robert C. Martin(又名“Bob 大叔”)在今年伦敦举办的 DDD Exchange Day 大会

Robert 引用了 Growing Object-Oriented Software Guided by Tests 一书中描述的架构模型(类似于 Hexagonal 架构),该模型通过三大块描述架构,这三块之间形成单方向的依赖关系——更易变的部分依赖于更稳定的部分:

  • 域模型,其中包含业务规则,它是最稳定且最重要的业务部分,不依赖于任何其他部分。
  • 应用服务,它实现了系统的用例,它使用并依赖于域模型。
  • 外部细节、数据库、用户接口、网络等,它们与业务模型的关系更少,是最易变的部分,依赖于其他两块。

Robert 指出,这一模型无法描述他所谓的关键内容:架构在于目的,即应用程序到底做什么。他认为,我们太过关注细节和框架,以致于使它们变成了系统的中心。

为解决这一短板,Robert 带我们回顾了 Ivar Jacobson 于 1992 年编著的一本书,“ Object-Oriented Software Engineering, A Use Case Driven Approach ”。Ivar 在此书中定义了一个应用架构,它基于许多小型用例,而用例不含细节。 Ivar 引入了三类对象,它们能自然地适应架构模型。Rovert 对它们的描述如下:

  • 交互者(Interactor)理解用例并包含针对特定应用的业务规则。
  • 交互者使用带有业务规则的实体(Entity)。
  • 边界(Boundary)对象在外部世界与交互者之间转移数据。

Robert 认为该模型的一个重要的优势是,它是一个可测试的模型,无需依赖于任何基础设施就可以对它进行测试,只需通过边界对象发送和接收对应的数据结构即可。

接着,Robert 转而介绍他的 Clean 架构模型,它是前述架构的一个变体。以上三个模型有一个共同核心,即它们都遵循稳定依赖原则,不对变化或易于变化的事物形成依赖。为实现了这一原则,上述模型让外部易变的部分依赖于更加稳定的部分,如域模型,而非形成相反的依赖关系。这样还可使实现变得更易于变化;多变的部分依赖于稳定的部分,Robert 说:

好架构就要能轻松地改变那些易变的决定。

Robert 还引用了 Jim Coplien 及其 DCI 架构,他认为这也相似的架构。

针对 Robert 近些年提出的架构思想,人们提出了一些批评意见,Robert 也作出了回应


查看英文原文: Uncle Bob: Architecture is About Intent, not Frameworks

2013-07-07 10:434264
用户头像

发布了 184 篇内容, 共 89.0 次阅读, 收获喜欢 8 次。

关注

评论

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

鸿蒙Next显示动画animateTo介绍

auhgnixgnahz

鸿蒙Next

智慧停车场系统(源码+文档+讲解+演示)

深圳亥时科技

鸿蒙Next应用桌面快捷操作shortcuts和Form卡片介绍

auhgnixgnahz

鸿蒙Next

MindIE服务化性能MindIE service如何调优?不考虑时延的极限吞吐场景

zjun

昇腾 模型推理 Ascend

MindIE服务化性能MindIE service如何调优?限制非首token时延的极限吞吐

zjun

性能优化 模型推理 Ascend NPU

MindIE服务化性能MindIE service如何调优?首token时延限制严格,非首token时延也有限制

zjun

昇腾 模型推理 Ascend NPU

HarmonyOSNext性能调优圣典可视化分析+命令行实战避坑指南

Turing_010

Ascend如何测试集合通信(HCCL)的功能正确性以及性能?

zjun

昇腾 模型推理 Ascend

「HarmonyOSNext性能调优秘籍:HiTraceMeter全场景追踪指南」

Turing_010

实战案例 | 高德地图MCP+DeepSeek 接入实现火警智能应急系统

高德开放平台

Java AI 前端 高德地图 MCP

鸿蒙Next并发线程TaskPool使用

auhgnixgnahz

鸿蒙Next

软件测试工程师如何用DeepSeek写测试用例:效率飙升的秘密武器!

测试人

人工智能 软件测试 DeepSeek

鸿蒙Next画布Canvas基础使用演示

auhgnixgnahz

鸿蒙Next

鸿蒙Next实现仿抖音点赞动画功能

auhgnixgnahz

鸿蒙Next

微店商品详情API接口详解

tbapi

微店商品详情接口 微店API 微店商品数据采集 微店商品详情数据采集

终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析

GreatSQL

Apache Cloudberry 向量化实践(一):为什么要优化向量数据重分布性能?

酷克数据HashData

鸿蒙Next使用Canvas绘制一个汽车仪表盘

auhgnixgnahz

鸿蒙Next

鸿蒙Next选择按钮Toggle、Checkbox、Radio介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next使用AVRecorder录制和播放音频

auhgnixgnahz

鸿蒙Next

AI 技术在语言学习中的应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI技术应用

鸿蒙Next实现通讯录索引条AlphabetIndexer

auhgnixgnahz

鸿蒙Next

DApp开发框架及特点

北京木奇移动技术有限公司

区块链技术开发 dapp开发 软件外包公司

使用DataSecurity Plus监控Windows文件完整性

运维有小邓

日志管理 IT运维 文件监控

鸿蒙Next数据量环形图标Gauge介绍

auhgnixgnahz

鸿蒙Next

鸿蒙Next使用AudioCapturer实现音频录制和AI语言转文字

auhgnixgnahz

鸿蒙Next

Story 与 OKX Ventures 发千万基金,押注 IP+AI 交叉领域

股市老人

网站域名是什么,怎么注册?一文讲清楚域名注册管理那些事

防火墙后吃泡面

跨境卖家必看:1688商品列表页面数据接口抓取攻略

tbapi

1688商品列表接口 1688API 1688商品数据采集

DApp的外包开发流程

北京木奇移动技术有限公司

dapp开发 区块链开发 软件外包公司

Bob大叔曰:架构在于目的而非框架_架构_Jan Stenberg_InfoQ精选文章