写点什么

Michael Feathers 希望消除错误能驱动设计

  • 2018-09-26
  • 本文字数:1296 字

    阅读完需:约 4 分钟

Michael Feathers 因其著作《高效操作遗留代码》( Working Effectively With Legacy Code )一书而广为人知。他发现错误中存在着一些值得关注之处,但他也承认大部分开发人员并未投入时间去关注这些错误。在他看来,很多错误解决机制就是采取某种程度上的放弃。在 Explore DDD 2018 大会上,Feathers 做了主题演讲,探讨消除错误如何驱动软件系统的设计。

针对领域驱动设计(DDD)大会的主题,Feathers 在演讲一开始就给出了对“领域”(Domain)的五种定义。他在这些定义中发现了一个共性,即领域就是一种范围,一些领域是随意构造的,也有一些是人们创造的。正因为领域是随意构造的,因此人们可以重新塑造和扩展领域。虽然人们可以直接使用 DDD 模拟并适应不断变化的业务流程,但为了更好地应对乃至消除错误,Feathers 建议应对领域做尽可能类似的更改。

Feathers 指出,领域扩展可能会导致一些不和谐因素,因此必须慎重。Feathers 就此举了两个例子,一个是在可选日期中输入了二月三十日,另一个是在编程语言中允许对数组赋以负的索引值。对于前者,人们非常易于理解简单域模型是如何允许这种非法情况的发生。但是对于负的数组索引值,情况则恰恰相反,对此应抛出一个错误。一旦这样的技术可用,并被人们按有效的语法采纳,那么我们就会意识到领域扩展对此类情况是非常有用的。

Feathers 提及,他探索错误的部分灵感来自于 Joe Duffy 博客中对微软的Midori 操作系统研究项目的论述,尤其是对错误模型l 的分析。Duffy 提及,“错误模型试图回答的一个基本问题就是,'错误’是如何传递给程序员和系统用户的?”这个看似简单的问题,自然导致了“如何定义错误”的挑战。Feathers 沿此思路继续推理,最终得到人们希望知道的是“为什么我们会存在错误?”。换句话说,如果“错误”只是一个用于指代我们领域中不匹配概念的用词,那么我们应该怎么做?

演讲进而从领域的概念延伸到如何实际处理错误。在遇到错误时,人们主要存在三种做法。第一种做法是简单地返回空值。这种做法消除了对任何错误原因的解释,需要人们对空引用做额外的检查工作,并且混淆了人们仍在处理错误的事实。另一种做法是抛出异常。这种做法也许要优于返回空值,因为它可以给出了问题的一些相关信息,但它仍需要调用者去处理异常情况。第三种做法是将错误作为领域的一部分。Feathers 认为,“错误就是我们领域的一部分,因为错误可能会发生在我们的工作中”。很显然,Feather 提倡采用第三种做法。

扩展领域意味着提出问题,“我们真正希望会发生什么?”。不应只是告诉他人错误的相关信息,而应引入一些新概念去提供可操作信息。一个例子就是使用空对象模式返回 ItemNotFound对象,其具体实现取决于具体的情况。

在演讲中的最后,Feathers 给出了 Erlang 的设计理念,并按英式风格概括为“保持冷静,任其崩溃”。计算是与现实世界紧密联系的,因此在现实中计算可能会产生失败。Erlang 通过将现实情况囊括在领域之中,扩展了应用的领域。如果一种语言的整个领域可以使用这种方式扩展,那么即便是更小的系统,都一定能受益于涵盖错误的领域扩展。

查看英文原文: Michael Feathers Wants Error Elimination to Be a Design Driver

2018-09-26 05:301220
用户头像

发布了 391 篇内容, 共 147.4 次阅读, 收获喜欢 257 次。

关注

评论 1 条评论

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

霍尼韦尔将收购庄信万丰的催化剂技术业务 拓展先进催化剂和工艺技术产品组合

财见

基于Pytorch Gemotric在昇腾上实现GAT图神经网络

永荣带你玩转昇腾

HarmonyNEXT手动申请权限以及使用系统控件获取地址坐标的案例(区别)

九九花开

前端 鸿蒙5.0 HarmonyNEXT5.0 鸿蒙地理坐标获取 HarmonyOSNEXT权限申请

案例解读:CST如何直接导入弯折后的PCB

思茂信息

cst CST软件 CST Studio Suite

干货分享:Dify中4种核心变量详解!

王磊

谁家最全面?贝锐向日葵 & ToDesk & AnyDesk & RayLink企业版对比

科技热闻

StarRocks+Paimon落地阿里日志采集:万亿级实时数据秒级查询

StarRocks

flink OLAP StarRocks paimon Checkpoin

关于OT & IIOT系统远程访问的零信任安全

权说安全

数据安全;工业互联网 零信任

淘天集团多项最新AI技术成果亮相TongAI大会,三篇论文入选Poster展示

新消费日报

openEuler助力鲲鹏+xPU全方位协同,加速使能AI业务生态

科技热闻

技术平权时代:灯塔低代码平台如何用CRM搭建,托起千万中小企业的星辰大海

中烟创新

零售企业库存管理的下一步发展需要打破孤岛

第七在线

鸿蒙版《智慧农业APP》通过华为云IoT平台实现软件硬件互联

九九花开

物联网 华为云IoT平台 鸿蒙5.0 HarmonyOS NEXT

2025深圳搞钱地图:按这张图找工作,房租少付1/3,工资多拿50%

测试人

人工智能 软件测试 内推

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(4)

HarmonyOS SDK

harmoyos

鸿蒙仓颉开发语言实战教程:页面跳转和传参

幽蓝计划

【华为云MySQL技术专栏】TaurusDB存算分离,SAL组件的妙用

华为云开发者联盟

网易伏羲亮相YEF2025大会:聚焦AI创新,CCF-网易雷火联合基金二期申报延长

网易伏羲

人机协作 网易伏羲 网易雷火 网易有灵

共赴万物智联新世界 开源鸿蒙开发者大会2025盛大召开

科技热闻

重磅预告!《AI融合高等教育白皮书》即将发布,专家集聚解读先行探索,邀您共同见证

ModelWhale

人工智能 AI+学科白皮书 人工智能通识教育 人工智能教育

开源鸿蒙智能手表生态暨新品发布:开启穿戴产业新纪元

极客天地

从零理解PID控制:小球仿真到代码实现,手把手教你掌握工业级控制算法

芯动大师

利用生成式 AI 加速应用程序 Operational Readiness Review(ORR)流程

亚马逊云科技 (Amazon Web Services)

昇腾910-PyTorch 实现 图神经网络GraphSage

永荣带你玩转昇腾

5月27日截止 | Volcano社区2025夏季LFX Mentorship欢迎你的加入

华为云原生团队

云计算 容器 云原生

MCP+A2A协议如何推动AI智能体进化为超级分布式网络

测试人

人工智能 软件测试

有哪些类似于jobleap.cn的职业发展相关平台

安全乐谷

求职 找工作 就业 失业

webgl技术在3D展示中的应用

北京木奇移动技术有限公司

软件外包公司 webgl技术 3D展示

信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)

tapdata

GaussDB 实时同步 StarRocks 实时数仓 Doris 实时同步 数据同步方案 TapData 数据集成

Taro on Harmony C-API 版本正式开源

京东零售技术

技术升级,openGauss数据库一体机商业实践成果显著

科技热闻

Michael Feathers希望消除错误能驱动设计_语言 & 开发_Thomas Betts_InfoQ精选文章