写点什么

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:433944
用户头像

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

关注

评论

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

春天已至,见证80/90/00后女性开发者的云上生长力量

华为云开发者联盟

人工智能 华为云 科技 华为云开发者联盟 先锋开发者云上说

提升团队效能:如何与下属进行有效沟通

霍格沃兹测试开发学社

7.1 版本 DRAutoSync 非计划内切换小记

TiDB 社区干货传送门

集群管理 数据库架构设计 7.x 实践

一键Run带你体验扩散模型的魅力

华为云开发者联盟

人工智能 华为云 华为云ModelArts 华为云开发者联盟

深入浅出:JavaScript 中 every() 的运作原理

Apifox

JavaScript 程序员 前端 数组 前端开发

云服务和本地部署大对比,应该选择哪种方式?

Finovy Cloud

云计算 云服务器 云部署搭建

深度解析:小红书笔记详情API的背后逻辑

技术冰糖葫芦

API 接口

TiDB Binlog功能使用实践

TiDB 社区干货传送门

6.x 实践

【我和 TiDB 社区的故事】我与 TiDB 专栏的故事

TiDB 社区干货传送门

人物访谈

LLM 大模型框架 LangChain 可观测性最佳实践

心有千千结

观测云 LLM langchain

如何将应用一键部署至多个环境?丨Walrus教程

SEAL安全

MySQL 运维 应用部署 Walrus

国家科技传播中心讲坛!播出预告:吴甜——当机器学会思考

飞桨PaddlePaddle

人工智能 深度学习 百度 BAIDU 百度飞桨

管理技巧 | 提升团队效能:如何与下属进行有效沟通

测吧(北京)科技有限公司

测试

探索AI的边界:如何精准地测试人工智能

测试人

软件测试

理解BS期权定价

数新网络官方账号

Python 期权 金融

基于 TiCDC 创建灾备和容灾切换

TiDB 社区干货传送门

管理与运维 新版本/特性解读 数据库架构设计 6.x 实践 7.x 实践

Shell 检查程序进程是否存在,自动重启

最爱小胖子

一文读懂私网解析 PrivateZone

火山引擎边缘云

DNS DNS服务器 DNS劫持 #DNS

大咖公开课 | 探索AI的边界:如何精准地测试人工智能

霍格沃兹测试开发学社

印度股票交易系统搭建GangGuHK

GangguHK

✅日活3kw的实际库存业务场景中的超卖到底怎么解决的

派大星

电商超卖 互联网+ 秒杀系统架构

TiKV 组件内 GC(物理空间回收)原理及常见问题

TiDB 社区干货传送门

监控 性能调优 集群管理 故障排查/诊断 TiKV 底层架构

3月9日(本周六)TiDB 社区活动在深圳!一起聊聊 TiDB 在零售、互联网+、Saas、游戏、出海企业的分布式数据库选型、升级降本之路、7.5 新版本的探索!线下参会有机会获得多款社区新周边哦~

TiDB 社区干货传送门

社区活动

软件测试团队管理技巧 | 提升团队效能:如何与下属进行有效沟通

测试人

软件测试

探索AI的边界:如何精准地测试人工智能

测吧(北京)科技有限公司

测试

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