news 2026/6/15 14:20:53

9、编程中的领域值与元对象协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
9、编程中的领域值与元对象协议

编程中的领域值与元对象协议

1. 领域值的处理

在编程中,我们可以实现一些进一步的概念,例如向有效值集合中添加所谓的“未定义”(底部)值和其他特殊值。这样做的好处是,我们可以像Ward Cunningham建议的那样,明确区分已定义值和特殊值。

例如,许多开发者在需要将未知的账户号码表示为整数时,会使用类似999这样的变通方法。这意味着按照惯例,他们将一个已定义的整数值变成了一个特殊的未定义值。然而,在不遵循此惯例的程序中就会出现问题,上述方法可能会导致严重的领域错误,而这类程序却无法捕获这些错误。为避免这个问题,我们不能将领域值当作简单的值集合来处理。

从Tony Hoare的开创性工作中我们了解到,类型化不仅应包括已定义的值集合,还应包括对该类型值允许执行的操作。在经典的命令式语言中,为用户定义类型实现这一点很困难,但在面向对象的语言中,我们实际上可以“免费”获得这个选项。

AccountNumber类型的值为例,其允许的操作并不像听起来那么简单。账户号码应允许进行加法和关系运算,因为银行之间批量转账时,账户号码的总和通常作为校验和进行传输。此外,一些银行会在账户号码中添加额外信息,比如可以从账户号码中推导出客户号码或账户类型。这些都是该类型允许的操作。

随着特殊值的引入,我们还可以为处理这些值定义适当的语义。在银行示例中,尝试将一个未定义的账户号码与一个“正常”号码相加可能会导致异常。

另一方面,将领域值类型实现为类也有一些缺点。为避免严重的陷阱,我们必须确保属于领域值类的值始终通过值语义而不是引用语义来处理。这意味着一个领域值对象不能通过两个标识符进行修改,更具体地说,领域值对

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:51:05

15、软件设计中的模式、框架与组件

软件设计中的模式、框架与组件 在软件设计领域,模式、框架和组件是构建高效、可维护软件系统的关键要素。下面将深入探讨它们的概念、特点以及相互关系。 1. 模式集合 模式并非孤立存在,它们在共同的应用领域内相互关联,并遵循所选设计隐喻的关系网络。在T&M方法中,…

作者头像 李华
网站建设 2026/6/15 18:34:02

Dify能否接入私有化大模型?内网部署可行性验证

Dify能否接入私有化大模型?内网部署可行性验证 在企业对数据安全和合规性要求日益严格的今天,越来越多组织开始将目光投向私有化部署的大语言模型(LLM)。公有云API虽然便捷,但敏感信息一旦外泄,后果不堪设想…

作者头像 李华
网站建设 2026/6/15 11:42:39

7、Selenium测试中的常见异常及处理方法

Selenium测试中的常见异常及处理方法 1. 理解堆栈跟踪 阅读堆栈跟踪信息一开始可能有些困难,但一旦理解,就会发现它能提供很多有用的信息。关键是要完整地阅读堆栈跟踪,不要害怕或跳过部分内容去猜测问题。堆栈跟踪虽不一定能直接指出问题代码,但能为你提供一个很好的排查…

作者头像 李华
网站建设 2026/6/15 11:44:36

12、高级用户交互 API 实用指南

高级用户交互 API 实用指南 1. 测试防御性编码与浏览器兼容性 在进行测试编码时,要采取防御性策略。如果使用现代且性能强劲的机器,仅在 Chrome 等现代浏览器上进行测试,通常无需添加等待检查代码,测试也能正常运行。然而,当开展跨浏览器兼容性检查,在运行 Internet Ex…

作者头像 李华
网站建设 2026/6/15 12:54:13

常见工业仪表serial通信故障排查操作指南

工业仪表Serial通信故障排查:从“掉线”到“稳如泰山”的实战指南你有没有遇到过这样的场景?某天车间突然报警,几台温度仪表集体“失联”,PLC读不到数据,上位机画面一片灰色。你冲到现场,重启设备、检查配置…

作者头像 李华
网站建设 2026/6/15 13:48:40

6、数据清洗技巧全解析

数据清洗技巧全解析 1. 结构化与非结构化数据集 数据来源广泛,如实证研究、历史研究或记录保存等。在数据整合过程中,由于人为因素,数据集难免会存在一些小瑕疵。通常,数据格式可分为结构化和非结构化两类。 结构化数据是指布局有一定组织性的原始数据,常见的结构化数据…

作者头像 李华