写点什么

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

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

关注

评论

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

Oracle sql 性能优化(一)

默默的成长

oracle 前端 11月月更

Databend 集群部署 | 新手篇(2)

Databend

开源

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转

TiAmo

华为 鸿蒙 11月月更

Redis深入浅出 知识总结

何你一起

数据库 redis 缓存 11月月更

云栖大会,未来万物皆是计算机?

阿里云CloudImagine

阿里云 云栖大会

react相关面试知识点总结

beifeng1996

React

怎样提高报表呈现的性能

步尔斯特

“吃”完这本Java性能调优实战,MySQL+JVM+Tomcat等问题一键全消

程序知音

Java MySQL JVM java面试 性能调优

Web前端安全系列之:XSS攻防

GFE

前端 前端安全

各地政府先后试点“首席数据官”,数据化转型或成为城市治理的重要抓手

数造万象

数字化转型 数据治理 DataOps 大数据中台

计算机网络:信道划分介质访问控制

timerring

计算机网络 11月月更 信道划分

京东云开发者|深入JDK中的Optional

京东科技开发者

jdk java8 NPE 空指针 Optional

javascript拖拽功能

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

python小知识-并发编程(2)

AIWeker

Python 人工智能 并发编程 python小知识 11月月更

Docker PHP 入门实践(四)

Felix

Docker thinkphp 11月月更 高德天气Api

Oracle sql 性能优化(二)

默默的成长

oracle 前端 11月月更

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

使用Socket.io库制作一个简单的实时聊天室

格斗家不爱在外太空沉思

JavaScript websocket 11月月更

JavaScript箭头函数与普通函数的区别

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

信创引领!亚信科技AntDB数据库助云南高速核心业务降本增效、系统自主可控

亚信AntDB数据库

AntDB 国产数据库 aisware antdb AntDB数据库 高速清分系统

前端工程师面试题自检

loveX001

JavaScript

主动学习(Active Learning)简介综述汇总以及主流技术方案

汀丶人工智能

nlp 11月月更 主动学习

React面试:谈谈虚拟DOM,Diff算法与Key机制

beifeng1996

React

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

诚意满满的前端面试总结

loveX001

JavaScript

Oracle sql 性能优化(三)

默默的成长

oracle 前端 11月月更

100+款AI产品薅羊毛攻略(下)——轻轻松松节省几十万

夏夜许游

人工智能 AI 阿里云视觉智能开放平台

优秀开源云原生工具推荐——系列4

HummerCloud

云原生 边缘计算 优秀开源项目 开源云工具 11月月更

云上创新!观测云携手阿里云日志服务 SLS,全面升级云上应用可观测性体验

观测云

京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML

京东科技开发者

软件架构 架构设计 架构可视化 图形化编排 C4模型

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