10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

霍尼韦尔:AI在工业领域的应用方兴未艾 不断发现新的应用场景

财见

Cloudera调查:近90%的企业使用人工智能,但过时的基础设施和员工技能差距阻碍了其充分发挥效益

财见

InPlant SCADA笔记 数据库中使用modbustcp在线调试来读取modsim32中的值

万里无云万里天

Modbus Tcp 工厂运维 InPlant SCADA modsim32

Zilliz Cloud✖️Ivy.ai:构建 GenAI 驱动的聊天业务

Zilliz

人工智能 Milvus Zilliz 向量数据库 大语言模型

国外的远程控制软件哪个好

科技热闻

低代码平台在现代人事管理系统中的应用与优势

天津汇柏科技有限公司

低代码 人事管理系统

InPlant SCADA笔记 数据库中本地节点创建modbus tcp驱动

万里无云万里天

Modbus Tcp 工厂运维 InPlant SCADA

使用京东API接口适用于的环境及验证调用合法性的方法

Noah

Cyble被Frost & Sullivan评为全球网络威胁情报市场的创新领导者

财见

IBM 发布《2024年数据泄露成本报告》:企业数据泄露成本创新高,AI和自动化成为"数据保卫战"突破口

财见

InPlant SCADA笔记 历史趋势

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 配方功能

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 事件配置

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 数据库管理中位号的批量导出

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 数据标签控件

万里无云万里天

工厂运维 InPlant SCADA

大模型数据分析平台 LangSmith 介绍

心有千千结

LLM #LangChain

InPlant SCADA笔记 数据库中添加位号,读取modbustcp设备的值并显示在流程图

万里无云万里天

Modbus Tcp 工厂运维 InPlant SCADA

InPlant SCADA笔记 图形控件

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 使用位号分组来管理位号

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 新建第一个工程

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 用户权限

万里无云万里天

工厂运维 InPlant SCADA

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