news 2026/1/18 5:54:20

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

作者头像

张小明

前端开发工程师

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

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

1. 领域值的处理

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

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

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

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

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

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

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

13、软件工作场所类型与模式框架组件的深度剖析

软件工作场所类型与模式框架组件的深度剖析 在软件开发领域,不同的工作场所类型有着各自独特的特点和需求,同时,模式、框架和组件等概念也在软件设计中发挥着重要作用。下面将详细介绍几种常见的工作场所类型以及模式、框架和组件的相关知识。 不同工作场所类型的特点与软…

作者头像 李华
网站建设 2026/1/16 21:09:06

宇信科技冲刺港股:第三季营收7.7亿 同比下降10% 百度是二股东

雷递网 雷建平 12月25日北京宇信科技集团股份有限公司(简称:“宇信科技”)日前更新招股书,准备在港交所上市。宇信科技2018年已在深交所创业板上市,截至目前,公司市值约160亿元。一旦在港股上市&#xff0c…

作者头像 李华
网站建设 2026/1/16 23:52:10

Dify + GPU算力:释放大模型推理最大性能

Dify GPU算力:释放大模型推理最大性能 在企业争相将大语言模型(LLM)落地为实际业务系统的今天,一个尖锐的矛盾日益凸显:一方面,客户期望AI应用能像搜索引擎一样秒级响应;另一方面,动…

作者头像 李华
网站建设 2026/1/14 9:49:00

从概念到产品:Dify如何加速大模型商业化落地?

从概念到产品:Dify如何加速大模型商业化落地 在企业纷纷拥抱AI的今天,一个现实问题摆在面前:为什么拥有强大能力的大语言模型(LLM)难以快速变成可用的产品?我们见过太多惊艳的Demo——能写诗、能编程、能回…

作者头像 李华
网站建设 2026/1/14 10:00:24

4、数据处理与分析:Haskell 实践之旅

数据处理与分析:Haskell 实践之旅 在数据处理与分析的领域中,不同的编程语言有着各自独特的特性和处理方式。Haskell 作为一种函数式编程语言,其严格的类型系统在数据处理时会带来一些特殊的挑战和机遇。本文将深入探讨如何在 Haskell 中进行数据处理和分析,从计算列表的均…

作者头像 李华
网站建设 2026/1/14 10:05:12

15、基于Haskell的数据分析与推荐引擎构建及正则表达式应用

基于Haskell的数据分析与推荐引擎构建及正则表达式应用 1. Haskell中特征值与特征向量的探索 在数据分析过程中,特征值与特征向量的分解是一项重要操作。以棒球数据为例,首先我们有如下的协方差矩阵 baseballCovMatrix : > baseballCovMatrix (2><2)[ 0.1…

作者头像 李华