写点什么

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

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

关注

评论 1 条评论

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

苹果用户你别走,用这个神器也能在你的Mac电脑上玩《双影奇境》了!

阿拉灯神丁

MacBook 双人成行 mac冒险游戏 CrossOver Mac下载 Mac游戏推荐

智能体(AI Agent)开发实战之【LangChain】(一)接入大模型输出结果

我和AI的成长

人工智能 AI 智能体 langchain AI Agent

Java 锁升级机制详解

量贩潮汐·WholesaleTide

Java

蚂蚁开源统一多模态模型 Ming-Omni,多模态输入与生成;OpenAI 将与芭比娃娃制造商合作 AI 玩具丨日报

RTE开发者社区

鸿蒙开发实战之Audio Kit打造美颜相机沉浸式音效

yimapingchuan

HarmonyOS NEXT

HarmonyOS开发实战之AVCodec Kit重构美颜相机媒体处理管线

yimapingchuan

HarmonyOS NEXT

你了解CAS吗?有什么问题吗?如何解决?

不在线第一只蜗牛

Java Python

ETL常见的数据转换方式

谷云科技RestCloud

MySQL 数据处理 ETL 数据转换 数据集成工具

鸿蒙开发实战之Service Collaboration Kit实现美颜相机能力开放

yimapingchuan

HarmonyOS

鸿蒙开发实战之Universal Keystore Kit构建美颜相机金融级安全存储

yimapingchuan

HarmonyOS

HarmonyOS开发实战之User Authentication Kit构建美颜相机生物认证体系

yimapingchuan

HarmonyOS NEXT

Volcano v1.12 正式发布!驱动云原生AI与批量计算向智能高效新阶段演进

华为云原生团队

云计算 容器 云原生 Volcano

「RTE Builder」项目寻踪!推荐项目,瓜分社区奖励~

RTE开发者社区

AI实战:一键生成数字人视频!

王磊

华南站最后席位|Altair 区域技术交流会报名倒计时:现场体验 Altair® HyperWorks® 2025全新版本

Altair RapidMiner

人工智能 AI 数字孪生 仿真 CAE

鸿蒙开发实战之Test Kit构建美颜相机质量保障体系

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Wear Engine Kit实现美颜相机穿戴设备联动

yimapingchuan

HarmonyOS

软件工厂:下一代工业“看不见的流水线”

DevOps和数字孪生

软件仿真

JVM 类加载过程与字节码执行深度解析

量贩潮汐·WholesaleTide

JVM

JavaScript入门干货:蓝桥杯Web组分章学习笔记(基于蓝桥云课《JavaScript基础入门》)

timeRATE

JavaScript html 前端 笔记 新手

(问题日志)解决因代理设置导致的npm包ECONNREFUSED下载错误

timeRATE

node.js npm

鸿蒙开发实战之Telephony Kit实现美颜相机通信互联

yimapingchuan

HarmonyOS NEXT

HarmonyOS实战:List拖拽位置交换的多种实现方式

IT小码哥

harmony HarmonyOS NEXT

CST的热仿真THt瞬时求解器--针式散热片

思茂信息

仿真 cst cst使用教程 CST软件 CST Studio Suite

AI进行时,AlphaGPT引领法律服务新时代

科技汇

AWS ELB 可观测性最佳实践

观测云

ELB

阿里巴巴十亿级并发系统设计:实现高并发场景下的稳定性和高性能

程序员高级码农

程序员 java 架构

个人建站做SEO网站外链这一点需要注意,做错了可能受到Google惩罚

村头的猫

SEO 建站

谷歌云代理 | 金融合规上云:谷歌云PCI DSS认证环境搭建指南

Cloud Ace 云一

鸿蒙开发实战之Status Bar Extension Kit增强美颜相机状态交互

yimapingchuan

HarmonyOS

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