写点什么

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

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

关注

评论

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

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

AIGC时代,设计软件应该做什么?丨AIGC X 企业服务

ToB行业头条

低代码赛道拥挤 生态聚合成为破局关键

力软低代码开发平台

面试官:如何实现开关降级

互联网架构师小马

Java sentinel aop 开关降级

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

互联网架构师小马

Java 架构

KW 新闻 | KaiwuDB 亮相数字中国并发布离散制造场景解决方案

KaiwuDB

数字中国 KaiwuDB 离散制造业解决方案

一文走进 SQL 编译-语义解析

KaiwuDB

KaiwuDB SQL编译

人民日报:天翼云持续拓展云网基础设施覆盖广度和深度

天翼云开发者社区

云计算

政务云建设提速,天翼云夯实智慧政务数字底座

天翼云开发者社区

云计算 大数据

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

如何理解 REST 和 RPC 之间的差异?

Apifox

程序员 RPC Rest 协议 RPC调用

什么是低代码(Low-Code)?

优秀

低代码 低代码Low-Code 低代码是什么

集结开发者力量,6月17日华为开发者联创日·深圳站即将启航!

说山水

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

HarmonyOS SDK

HMS Core

开发一次、运行多端:Weex与小程序容器的卓越优势解析

FinFish

Weex 跨端开发 小程序容器 跨端框架 跨端技术

Java获取本机IP

Geek_7ubdnf

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

阿里云大数据AI技术

阿里云 AIGC

微服务高并发:授权与系统自适应功能的实现原理

互联网架构师小马

授权 系统自适应

执行器-Query 执行详解

KaiwuDB

KaiwuDB Query执行

破防了!阿里用17个真实企业级项目阐述Java系统分析与架构设计

互联网架构师小马

Java 架构设计 系统分析

CloudOps自动化运维套件助力企业更好上云、用云、管云

阿里云弹性计算

云计算 大数据 阿里云 物联网

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

正式启动|2023中国高校计算机大赛—大数据挑战赛火热报名中!

云智慧AIOps社区

大数据 AI 算法 运维 智能运维

在百度生态用达人营销赋能品牌生意增长 | 度星选白皮书

说山水

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