news 2026/4/18 12:00:08

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

作者头像

张小明

前端开发工程师

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

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

1. 领域值的处理

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

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

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

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

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

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

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

CCS使用优化控制逻辑的设计技巧

深入CCS实战:如何用代码与工具“榨干”TI处理器的控制性能你有没有遇到过这样的场景?明明算法逻辑写得清清楚楚,可系统一运行就抖动、响应迟钝,甚至莫名其妙进不了某个状态。调试半天,发现不是硬件问题,也不…

作者头像 李华
网站建设 2026/4/12 22:41:47

用Dify做舆情分析系统,实时监控品牌声量变化

用Dify做舆情分析系统,实时监控品牌声量变化 在社交媒体主导信息传播的今天,一条负面评论可能在几小时内演变成全网热议的品牌危机。某手机厂商曾因用户集中投诉“电池异常发热”却未及时察觉,最终导致新品发布后口碑迅速下滑——这类事件暴露…

作者头像 李华
网站建设 2026/4/15 20:54:29

8、Selenium 异常与等待机制详解

Selenium 异常与等待机制详解 常见异常及原因 在使用过程中,可能会遇到一些异常情况,下面为你详细介绍两种常见异常及其产生原因。 1. UnreachableBrowserException :当发出命令但无法得到响应时,会抛出该异常,意味着无法连接到 RemoteWebDriver 实例。可能的原因如下…

作者头像 李华
网站建设 2026/4/18 8:23:34

16、利用代理跟踪Selenium网络流量

利用代理跟踪Selenium网络流量 在自动化测试中,我们常常希望能够跟踪浏览器的网络流量,然而Selenium本身并不直接支持这一功能。本文将详细介绍如何借助代理来实现网络流量的跟踪,并对相关代码实现进行分析。 1. Selenium为何不支持网络流量跟踪 Selenium的主要功能是驱动…

作者头像 李华
网站建设 2026/4/18 6:24:06

自动驾驶感知系统架构:多传感器融合深度剖析

自动驾驶感知系统架构:多传感器融合的实战拆解你有没有想过,一辆自动驾驶汽车是如何“看清”世界的?它不像人类司机那样靠一双眼睛加多年经验,而是依赖一套精密协作的“感官系统”——摄像头、雷达、激光雷达协同工作,…

作者头像 李华
网站建设 2026/4/18 8:29:41

Dify平台支持的多场景AI应用案例分享

Dify平台支持的多场景AI应用案例分享 在企业纷纷拥抱人工智能的今天,一个现实问题摆在面前:如何让大模型真正落地到业务中?我们见过太多项目停留在PPT阶段——团队花了几周时间调通API、写完提示词,结果发现维护成本高、响应不稳定…

作者头像 李华