NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

java环境搭建Ubuntu Linux教程

百度搜索:蓝易云

Java Linux ubuntu 运维 云服务器

根深叶茂,众行致远 | OpenHarmony项目群技术指导委员会迎新春,展未来

科技热闻

听GPT 讲Deno源代码(8)

fliter

Parallels Desktop 19 for Mac(PD19虚拟机)无需关闭sipv19.1.0一键激活版

iMac小白

记忆承载

玄兴梦影

文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题

福大大架构师每日一题

福大大架构师每日一题

SpringBoot中最常用的5个内置对象

百度搜索:蓝易云

云计算 Linux 运维 Spring Boot 云服务器

docker部署ELK8.8.1集群logstash报错PKIX path building failed

百度搜索:蓝易云

Linux 运维 Logstash ELK 云服务器

用 Go 语言实现刘谦 2024 春晚魔术,还原尼格买提汗流浃背的尴尬瞬间!

江湖十年

golang 算法

汽车零部件MES系统解决方案

万界星空科技

汽车 制造业 mes 万界星空科技 汽车零部件

听GPT 讲Deno源代码(7)

fliter

田螺

fliter

低代码与MES系统相结合

万界星空科技

低代码 低代码开发 低代码平台 mes 万界星空科技

初识TiDB的增量数据同步工具TiCDC

TiDB 社区干货传送门

迁移 实践案例 7.x 实践

使用 TiKV 读改写 TiDB 数据

TiDB 社区干货传送门

TiDB 源码解读 TiKV 底层架构

汽车零部件MES系统实施方案

万界星空科技

汽车 mes 万界星空科技 汽车零部件

听GPT 讲Deno源代码(4)

fliter

vben Admin 01- 安装,初始设置

麦兜

Go项目中的Labels

fliter

2023年总结

wood

阿里云-负载均衡(ALB)

智慧源点

ALB

git生成change-id的解决方法

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

MySQL之优化SELECT语句

百度搜索:蓝易云

MySQL Linux 运维 云服务器 select

归乡

fliter

听GPT 讲Deno源代码(3)

fliter

数据所在,计算随行:Databend 的 2023 年度总结

Databend

php作业1

大肚皮狒狒

听GPT 讲Deno源代码(6)

fliter

听GPT 讲Deno源代码(5)

fliter

听 GPT 讲 Deno 源代码 (9)

fliter

认识mysql命令

百度搜索:蓝易云

MySQL 云计算 Linux 运维 云服务器

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