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

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(使用前将#替换为@)

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

  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • 使用Zend实现文件上传进度

    您好 我正在尝试使用 Zend 实现上传进度 但是我还没有找到任何详细的教程 指针会很有用 Thanks 我不记得曾经看过完整详细的教程来解释如何使用 Zend Framework 获取上传进度条 但这里有一些提示 如果您已经了解有关 PH
  • 404 路由无法匹配请求的 URL

    我刚刚开始学习zend 框架 questions tagged zend framework并遵循此用户指南 http framework zend com manual 2 3 en index html 我能够成功安装zend skel
  • 如何重载泛型方法以使其在 Typescript 中不那么泛型?

    我在抽象类中有一个通用静态方法 abstract class Base static find
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 抽象类、接口、mixins

    有人可以向我解释一下两者之间的区别吗抽象类 接口 and mixins 我之前在代码中使用过它们 但我不知道技术差异 抽象类 抽象类是不被设计为实例化的类 抽象类可以没有实现 部分实现或全部实现 抽象类旨在允许其子类共享公共 默认 实现 抽
  • 过渡到面向对象的ABAP?

    看来我们大多数 SAP 程序员都在使用旧版本的 ABAP 也就是面向对象之前的版本 我还注意到 面向对象的语言更加干净 更加现代 他们显然借此机会摆脱了不推荐使用的东西 由于该系统尚未推出 因此重新设计的时机宜早不宜迟 是否值得要求将新代码
  • 如果我们在实体类的getter和setter中添加逻辑是不是不好的设计

    JAVA 8 我有一个 POJO 类 class User private String name private String password Getters Setters 我将使用它作为实体类 在 getter setter 中pa
  • 我应该使用课程吗? (Python)

    我正在尝试编写一个包含一些数学函数的小型 Python 模块 例如 它可能包含如下函数 def quad x a b c return a x 2 b x c 您可能会注意到它包含几个参数 即a b c 除了变量x 现在 如果我将其放入文件
  • 将查询转换为使用 Zend_Db_Select

    我在将此查询转换为使用 ZF 时遇到一些问题Zend Db Select SELECT b id b title b description FROM memberships AS m JOIN blogs AS b ON b id m b
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 如何在没有接口的情况下模拟多重继承?

    如何在不使用接口的情况下在 C 中模拟多重继承 我确实相信 接口能力不适用于此任务 我正在寻找更多面向 设计模式 的方式 就像 Marcus 所说 使用接口 扩展方法来制作像 mixins 这样的东西可能是你目前最好的选择 另请参阅 使用接
  • 如何用java编写组合和聚合

    我想知道如何在java中识别组合和聚合代码 我有C 代码 但我不明白如何用java编写 作品 class A class B A composited A 通过指针聚合 class A class B A pointer to A B A
  • 用于在运行时使用附加信息增强 Java 中现有数据结构的设计模式

    我将从一个小例子开始 想象一个具有几个实体的应用程序 实体A 1 n gt 实体B 1 n gt 实体C 假设我们有一个返回 EnityC 实例列表的服务方法 在 UI 中 我们想要显示 EntityC 但也向仅与 UI 相关的实体添加一些
  • IntelliJ可以自动创建装饰器类吗?

    有时 我创建一个像这样的装饰器类 class MyInterfaceDecorator implements MyInterface private final MyInterface delegate constructor taking
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 为什么 Delphi 变体不能保存对象?

    为什么 Delphi 变体不能保存对象 更重要的是 这种限制背后的原因是什么 你绝对可以storeVariant 变量中的对象 只需将其转换为 NativeUInt 无论如何 对象只是一个指针 obj TObject Create v Na
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账

随机推荐

  • 将 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 模式的其他示例 它们似乎非常相似 我们能否推断出 值对象 与 域对象 是一样的 如果不是 您能澄清一下它们之间的区别吗 其中一个的功能是什么 如果另一个的功能又如何呢 我