写点什么

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

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

关注

评论

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

架构实战营-模块一作业

氢原子

#架构实战营

架构训练营模块一作业

现在不学习马上变垃圾

#架构实战营

全面进化!Apache Doris 1.2.0 Release 版本正式发布|版本通告

SelectDB

数据库 大数据 开源 数据分析 Doris

从汽车之家效能平台建设看汽车行业研发数字化之路

之家技术

数字化 汽车 构架 效能度量 效能

王者荣耀商城异地多活设计

π

架构--模块七 作业

李某人

架构训练营

携程全球合作伙伴峰会商旅分论坛:以五大中心构建“人数智”服务能力体系

携程商旅

架构实战营-模块1-作业

zealot0317

微信业务架构图 & 学生管理系统

chinandy

架构设计

模块一作业提交

Geek_7d539e

提供多种数据看板,瓴羊Quick BI全面提升企业可视化分析能力

小偏执o

架构实战营模块一_作业

原城

架构实战营 #架构实战营 架构师实战营 「架构实战营」

如何通过“推送文案的千人千面”有效提升用户转化和留存

极光GPTBots-极光推送

极光推送 用户运营

MySQL执行计划之explain详解

@下一站

程序 MySQL优化 dba 11月日更 11月月更

无刷直流电机最强科普(收藏版)

元器件秋姐

发展史 电机 BLDC应用 电子工程师 无刷直流电机

设计原则 — 多用组合,少用继承

Lemoon Can

面向对象设计原则 设计原则

阿里云祝顺民:生而为云,连接增长

云布道师

阿里云 云网络

【沙丘大会回顾】九科信息研发中心自动化负责人郑文茂分享央企数字员工实践案例

九科Ninetech

设计原则 — 基于接口而非实现编程

Lemoon Can

面向对象设计原则 设计原则

API安全中的数据隐私保护步骤

穿过生命散发芬芳

API安全 12月月更

模块一作业

unique

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

NebulaGraph

图数据库 世界杯 AI预测

模块一作业

陈天境

2022-12-07:删除重复的电子邮箱。删除重复数据后,id=3的数据被删除。请问sql语句如何写? DROP TABLE IF EXISTS `person`; CREATE TABLE `per

福大大架构师每日一题

数据库 福大大

十大开源测试工具和框架

FunTester

设计原则

Lemoon Can

面向对象设计原则 设计原则

Verilog 设计方法

芯动大师

流程 Verilog 设计方法

模块七-王者荣耀商城异地多活架构设计

Geek_b35d92

商城 构架 王者荣耀

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