域对象和值对象 - 它们相等吗?

2024-04-05

通过查看 Zend 快速入门教程中的域对象示例以及考虑 DAO/VO 模式的其他示例,它们似乎非常相似。

我们能否推断出“值对象”与“域对象”是一样的?

如果不是,您能澄清一下它们之间的区别吗?

其中一个的功能是什么,如果另一个的功能又如何呢?

我问这个是因为,两者都是由 getter 和 setter 组成,仅此而已。看起来,它们执行相同的功能......

Update:

因此,Zend Framework 快速教程文档将其称为域对象:

 // application/models/Guestbook.php

    class Application_Model_Guestbook
    {
        protected $_comment;
        protected $_created;
        protected $_email;
        protected $_id;

        public function __construct(array $options = null)
        {
            if (is_array($options)) {
                $this->setOptions($options);
            }
        }

        public function __set($name, $value)
        {
            $method = 'set' . $name;
            if (('mapper' == $name) || !method_exists($this, $method)) {
                throw new Exception('Invalid guestbook property');
            }
            $this->$method($value);
        }

        public function __get($name)
        {
            $method = 'get' . $name;
            if (('mapper' == $name) || !method_exists($this, $method)) {
                throw new Exception('Invalid guestbook property');
            }
            return $this->$method();
        }

        public function setOptions(array $options)
        {
            $methods = get_class_methods($this);
            foreach ($options as $key => $value) {
                $method = 'set' . ucfirst($key);
                if (in_array($method, $methods)) {
                    $this->$method($value);
                }
            }
            return $this;
        }

        public function setComment($text)
        {
            $this->_comment = (string) $text;
            return $this;
        }

        public function getComment()
        {
            return $this->_comment;
        }

        public function setEmail($email)
        {
            $this->_email = (string) $email;
            return $this;
        }

        public function getEmail()
        {
            return $this->_email;
        }

        public function setCreated($ts)
        {
            $this->_created = $ts;
            return $this;
        }

        public function getCreated()
        {
            return $this->_created;
        }

        public function setId($id)
        {
            $this->_id = (int) $id;
            return $this;
        }

        public function getId()
        {
            return $this->_id;
        }
    }

1)严格来说,我们面对的是“贫血领域对象”吗?

2)是否称为“域对象”just因为它包含领域逻辑?

3)如果是这种情况,那么那些包含 findBookByAuthor(); 等方法的映射器他们也在处理领域逻辑,对吧?它们也可以被视为域对象吗?

多谢


通常,值对象封装具有值的内容:货币、日期、温度等。它们可能包含值和单位,但它们并不复杂。

域对象可能更复杂(除非它是贫血域对象,它是一堆假装是域对象的 getter 和 setter),因为它包含域逻辑。

例如,您可能有一个发票域对象,其中包含许多发票行(每个发票项目一行),每个发票行可能有一个净额、一个税额和一个发票项目。金额和发票项目通常是值对象并且相当简单。

发票本身可能会因延迟付款的利率、审批流程的支持或会计系统的支持而变得复杂。

值对象足够简单,可以跨不同域重用。域对象对您的实际域进行建模,通常是为了对您的特定业务或域(包括业务逻辑)进行建模而编写的。

您经常会看到它们之间几乎没有区别的原因是许多开发人员将使用事务脚本/数据传输对象设计,但将其称为域模型。他们将 getter 和 setter 的集合标记为“域对象”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

域对象和值对象 - 它们相等吗? 的相关文章

  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • Zend_Controller_Router_Route:找不到翻译器

    我正在开发一个多语言应用程序 在引导程序中有路由设置 protected function initRoutes this gt bootstrap frontController router this gt frontControlle
  • 为什么json序列化器不符合多态性?

    我在 NET 4 5 Windows 应用商店应用程序中使用库存 JSON 序列化器 System Runtime Serialization Json DataContractJsonSerializer 我有一个由 API 提供商提供的
  • 不在对象上下文中时使用 $this php

    我刚刚开始学习 php 中的 OOPS 我写了一个简单的程序来实现继承 当不在对象上下文中时 我收到 this 的致命错误 谁能解释一下这个错误 它是什么意思 这是我的代码
  • C++ 包装类的设计

    我必须使用一个界面非常笨拙的旧类 由于我无法更改它并且依赖它 因此我想构建一个包装器 提供一个干净的界面 假设我有课笨手笨脚的班级 基本上 我有三种方法 1 参考会员 Class Wrapper public Wrapper ClumsyC
  • Mootools 使用“extend”方法扩展“Function”类,导致 jQuery 无法使用

    Mootools 扩展了 Function 类 并在其中添加了一个名为 extend 的新方法 现在 jQuery 尝试使用 jQuery prototype extend 添加 扩展 功能 然而 由于 extend 已经是 jQuery
  • 为什么我收到错误“错误 C2259:...无法实例化抽象类”?

    任何帮助都是appriced 我正在研究 C 工厂模式 但收到此错误 1 gt c users brian documents visual studio 2010 projects cst276lab 3 guitar hpp 456 错
  • 在 init 之外在 java 中创建对象

    因此 对于我正在创建的游戏 我有一些扩展 GameDriver 的类 到目前为止 在所有其他类上我都能够扩展 GameDriver 然后在 GameDriver 中我可以执行以下操作 ArrayList
  • “TryParse / Parse like”模式:实现它的最佳方法是什么

    这个问题是来自的后续问题如何指示方法不成功 https stackoverflow com questions 161822 how to indicate that a method was unsuccessful xxx Tryxxx
  • 如何从类外部更改公共 R6 类方法?

    我希望能够在我的 R6 类中重新定义公共方法 以便它根据该类保存的数据类型进行更改 如下所示 library R6 Simple lt R6Class Simple public list dt mtcars my print functi
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • zend框架找不到模型类?

    Yall 我有一个简单的问题 这可能是一个简单的配置问题 但是 我定义了一个模型 当我尝试从控制器访问它时 失败 模型位于模型目录中 当我查看快速启动应用程序时 看来这应该可行 这是我的模型 我的控制器停止了 这是控制器代码
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 如何简化 ASP.NET MVC 中的全状态交错模式对话框

    我需要在多对多模式对话框中保留状态渐进增强 http en wikipedia org wiki Progressive enhancementASP NET MVC 项目中的方式 在我的代码中 当禁用 javascript 时 模式对话框
  • Zend 框架 PDF 问题

    又是我 伙计们 我有一个小问题 Create new PDF pdf new Zend Pdf Add new page to the document page pdf gt newPage Zend Pdf Page SIZE A4 p
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结

随机推荐

  • 将 OutputStream 转换为 ByteArrayOutputStream

    我正在尝试转换OutputStream to a ByteArrayOutput溪流 我无法找到任何关于如何做到这一点的明确简单的答案 这个问题是在 StackOverflow 上的问题标题中提出的 但问题的正文询问如何更改ByteArra
  • IE 中字段集的背景颜色超出边界

    在 IE 中 字段集的背景颜色超出边界 我有一个表格 背景颜色设置为蓝色 字段集的背景颜色设置为白色 我该如何在 IE 中解决这个问题 My CSS fieldset margin 10px fieldset legend font siz
  • Google 网络字体和 Windows XP

    我的网站正在使用 google 字体 但我在 XP 上遇到了一些问题 也就是说 因为 XP 默认情况下没有抗锯齿功能 所以所有字体都是像素化的 即使在 Firefox 和 Chrome 等浏览器中也是如此 有没有办法解决这个问题 或者 XP
  • Windows 版 Safari 和 Mac 版 Safari 之间的差异

    从开发人员的角度来看 Mac 版 Safari 和 Windows 版 Safari 有哪些区别 我认为这可以归结为评估之间的差异 如果我错过了什么 请纠正 布局渲染 JavaScript 行为 最终要做出的决定是 开发人员能否仅在 Saf
  • jQuery 请求未定义的 url(与 phpdevshell 一起使用)

    我正在使用 phpdevshell 使用最新的 jQuery 创建一个应用程序 现在 在我看来没有任何原因的情况下 jQuery 开始请求一个以 undefined 结尾的 url 但该 url 不存在并导致 404 它寻找这个网址 htt
  • 迭代 JObject 键

    我有以下内容JObject作为回报https gate io api2 trade https gate io api2 tradeAPI 我如何迭代每个作为单独硬币的密钥也获得它的值 我尝试使用 Newtonsoft 解析它JObject
  • gulp 任务来处理可写的文件

    我在VS2015项目中使用Gulp来运行jscs http jscs info 在 JavaScript 文件上使用fix选项集 目的是修改读取的同一文件 即源和目标相同 var gulp require gulp var jscs req
  • 无法在 Intellij IDEA 中设置 Java 断点

    我试图将断点放入 GoogleAppEngine 源代码 SDK 1 7 0 但 IDEA Ultimate 11 0 2 一直告诉我Warning No executable code found at line 482 in class
  • Oreo (8.1) 中的设备蓝牙地址

    我需要获取设备的蓝牙MAC地址 在 Android 6 之前 这很简单BluetoothAdapter getDefaultAdapter getAddress 之后我们不得不使用一个简单的解决方法 String macAddress an
  • C++ - 对于内部编译器错误可以做什么?

    在编写矩阵类时 我遇到了一些有趣且烦人的事情 内部编译器错误 我愿意在名为的类中调用一个姐妹构造函数Matrix4
  • 从文本文件中删除回车符

    我有一个文本文件是 已定界 长度超过 59 000 行 如何删除回车以便每一行都是一条记录 Here is what the current file looks like Here is what I need it to look li
  • 未满足的对等依赖关系 Angular 2.3.0 rxjs zone.js

    我一直有未满足的同伴依赖性rxjs and zone js 即使当我移除我的node modules文件夹 清理 npm 缓存并重新安装 我的node版本是6 7 0 npm版本是3 10 8 这是我的 package json name
  • 在 Woocommerce 中一次只允许购物车中的一种产品类别

    我如何将 Woocommerce 购物车配置为一次只允许其中一种产品类别类型 以下代码将允许仅将一种产品类别中的商品添加到购物车 从而避免添加到购物车并显示自定义通知 add filter woocommerce add to cart v
  • 如何将 Font Awesome 图标添加到 按钮中?

    我正在尝试添加一个
  • java.lang.NoClassDefFoundError:com/fasterxml/jackson/core/JsonFactory

    我正在研究YouTube broadcast样本示例 我创建了一个样本Java Project并添加了所需的罐子 但是 当我尝试运行该项目时 它会抛出异常 例外 Throwable com fasterxml jackson core Js
  • 使用 jquery 偶尔出现 ajax 响应错误 {readyState=0, status=0, statusText="error"}

    我遇到了使用 jquery 和 Coldfusion 服务器端 的 AJAX 响应问题 有时有效 有时无效 当我测试直接调用它的服务器端组件时 它总是有效 所以我猜问题出在 ajax 响应上 我直接从服务器获取 serverurl 所以它不
  • 在 C# 中将 latin1 转换为 UTF8 [重复]

    这个问题在这里已经有答案了 可能的重复 将 Latin 1 编码的 UTF8 转换为 Unicode https stackoverflow com questions 1430513 convert latin 1 encoded utf
  • 解析作为查询参数传递给 REST API 的不同日期的标准方法是什么?

    我正在开发一个 REST API 它支持日期作为查询参数 由于它是查询参数 因此它将是字符串 现在可以在 QueryParams 中以以下格式发送日期 yyyy mm dd T HH MM SS fff NNNN 这意味着以下是有效日期 2
  • 将 dd/MM/yyyy 转换为 yyyy/MM/dd?

    我想将字符串 30 12 2012 转换为 2012 12 30 我的应用程序设置为 en CA 但数据库默认接受 yyyy MM dd 我怎样才能做到这一点而不依赖于当前的文化信息集 在服务器上 正如所有评论所说 但到目前为止没有一个答案
  • 域对象和值对象 - 它们相等吗?

    通过查看 Zend 快速入门教程中的域对象示例以及考虑 DAO VO 模式的其他示例 它们似乎非常相似 我们能否推断出 值对象 与 域对象 是一样的 如果不是 您能澄清一下它们之间的区别吗 其中一个的功能是什么 如果另一个的功能又如何呢 我