速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

C++---类型萃取---std::remove_cv/std::remove_cv

桑榆

C++ STL 11月月更

2022年第三季度泛出行行业洞察:泛出行行业正在经历数智化升级的关键时期,用户规模保持平稳增长,行业整体良性发展

易观分析

数智化 泛出行

react源码分析:组件的创建和更新

flyzz177

React

Zebec流支付生态,开启多链布局的“两手准备”

股市老人

对于基于鸿蒙系统的应用支持多语言Arkui框架的线性容器类和PieChart的研究实战

恒山其若陋兮

前端 11月月更

Kafka SASL 用户认证机制

spacerrobot

kafka 认证授权 SASL SCRAM JAAS

带你实现react源码的核心功能

goClient1992

React

API关键技术-日志审计技术

阿泽🧸

日志审计 11月月更

【web 开发基础】PHP中的引用参数的函数 (32)

迷彩

web开发基础 11月月更 引用传递 引用参数函数 值传递

软件测试之 Contract Testing

QE_LAB

契约测试 测试技术

【活动回顾】Apps Everywhere 上海站圆满结束

亚马逊云科技 (Amazon Web Services)

人工智能 机器学习

【个人成长】《代码的艺术》视频分享合集

非晓为骁

职业规划 开发 软件工程能力 代码的艺术

手写一个react,看透react运行机制

goClient1992

React

HarmonyOS 3重磅版本更新,Mate Xs 2等更多设备支持超级中转站!

Geek_2d6073

【web 开发基础】PHP 中的默认(缺省)参数的函数 (33)

迷彩

缺省参数 函数 web开发基础 11月月更 默认参数

微信小程序开发在全局配置和资源加载优化在获取接口上的节点信息实战

恒山其若陋兮

前端 11月月更

自动化测试成熟度模型

老张

DevOps 自动化测试

K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

程序员欣宸

Kubernetes jenkins 11月月更

react源码分析:深度理解React.Context

flyzz177

React

《算法》世界二

初学者

算法 网络 11月月更

使用keytool生成Tomcat证书

源字节1号

如何给 Fiori Elements 应用添加自定义按钮

汪子熙

前端开发 web开发 Fiori SAP UI5 11月月更

【web 开发基础】PHP中的伪类型参数的函数 (31)

迷彩

函数 web开发基础 11月月更 伪类型参数函数 伪类型

Jan Ozer:高清直播互动场景下的硬编码如何选型?

声网

人工智能 编码 视频

架构实战营模块 6 作业

陌生流云

架构实战营

《算法》世界一

初学者

算法 网络 11月月更

基于OpenHarmony的ArkUI框架进阶对于高性能容器类和持久化和原子化的运用

恒山其若陋兮

前端 11月月更

深入React源码揭开渲染更新流程的面纱

goClient1992

React

react的useState源码分析

flyzz177

React

如何用科学的方法“撞大运”? | 学点运气

赵新龙

CTO 创新 与运气竞争

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