写点什么

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

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

关注

评论

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

高仿知乎日报无限轮播图+指示符切换动画效果

android 程序员 移动开发

鸿洋:拖不得了,Android11真的要来了,最全适配实践指南奉上

android 程序员 移动开发

什么是开源软件和自由软件,你真的了解吗

耳东@Erdong

开源软件 11月日更 自由软件

面试官:为什么 Activity

android 程序员 移动开发

面试题学习与复习二

android 程序员 移动开发

面试官:说一说Android启动优化

android 程序员 移动开发

面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?

android 程序员 移动开发

面试官:“看你简历上写熟悉 Handler 机制,那聊聊 IdleHandler 吧

android 程序员 移动开发

面试官:今日头条启动很快,你觉得可能是做了哪些优化?

程序员 移动开发

面试官:“会不会熟练使用Jetpack” 我

android 程序员 移动开发

在线文本转2-36任意进制工具

入门小站

工具

[ CloudWeGo 微服务实践 - 06 ] 服务发现(2)

baiyutang

golang 微服务 11月日更

面试官教你做人:字节跳动在招2000人,招聘要求让人窒息…

android 程序员 移动开发

音视频高手课01-Clang交叉编译最新FFmpeg

android 程序员 移动开发

音视频开发:为什么推荐使用Jetpack CameraX?

android 程序员 移动开发

高级UI强行进阶:自定义View实现女朋友欲罢不能的网易云音乐宇宙尘埃特效,拿去装笔不用谢~

android 程序员 移动开发

面试官还问Handler?那我要给你讲个故事

android 程序员 移动开发

面试被虐?不要慌,看懂这份Android面试真经大厂不是问题!

android 程序员 移动开发

架构1期模块十毕业总结

五只羊

架构实战营

面试时,问哪些问题能试出一个 Android 应用开发者真正的水平12?

android 程序员 移动开发

linux之我常用的20条命令( 之三)

入门小站

Linux

面试官:View的事件分发我必问,不会给你一个pass

android 程序员 移动开发

面试官:“会不会熟练使用Jetpack”--我

android 程序员 移动开发

音视频入门(二)色彩空间RGB和YUV

android 程序员 移动开发

领域驱动设计简介

android 程序员 移动开发

解锁WiFi密码,我只用了60行代码....

Jackpop

Android C++ 系列:JNI数组操作

轻口味

android 11月日更

CSS响应式布局之REM

Augus

CSS 11月日更

面试官:我面Android程序员,经常遇到背题的,一问原理就露馅了

android 程序员 移动开发

spring 的aop笔记

加里都好

Java 自定义注解(二)

程序员架构进阶

Java 注解 11月日更

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