问题标签 [value-objects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
539 浏览

java - 这些是同义词,彼此的子集还是完全不同?

问题标题中提到的概念在一定程度上是同义词吗?主要区别在哪里(上下文,结构,...),可以将一个视为另一个的子集吗?以下是来自维基百科的一些简短定义。

POJO(普通旧 Java 对象) 维基百科

在计算软件中,POJO 是 Plain Old Java Object 的首字母缩写。该名称用于强调给定对象是普通 Java 对象,而不是特殊对象,尤其不是 Enterprise JavaBean。该术语由 Martin Fowler、Rebecca Parsons 和 Josh MacKenzie 在 2000 年 9 月创造:

Java Bean 维基百科

JavaBean 是 Java 的可重用软件组件,可以在构建器工具中进行可视化操作。实际上,它们是用符合特定约定的 Java 编程语言编写的类。它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个 bean 对象而不是多个单独的对象传递。JavaBean 是可序列化的 Java 对象,具有空构造函数,并允许使用 getter 和 setter 方法访问属性。

值对象 维基百科

数据传输对象 (DTO),以前称为值对象或 VO,是一种用于在软件应用程序子系统之间传输数据的设计模式。DTO 通常与数据访问对象结合使用以从数据库中检索数据。

业务对象 维基百科

业务对象是一种可理解的实体,是 n 层面向对象计算机程序中业务层内部的参与者。

有关的:

DTO、VO、POJO、JavaBeans 的区别? JavaBean 和 POJO 有什么区别? DDD:实体和值对象的区别有什么用?

0 投票
1 回答
1117 浏览

hibernate - DDD 并使用 Hibernate 在数据库中存储复杂的值对象

在 Eric Evans ( http://dddcommunity.org/examples )编写的示例 DDD 项目中,有一个 Cargo 类,它是一个实体对象,并使用 hibernate 映射到 db 表。该货物域对象由几个值对象组成,其中之一是交付。这个 Delivery 值对象非常复杂,因为它有大约 10 个字段。尽管如此,Delivery 是一个平面对象,因此它可以完美地存储在与 Cargo 相同的表中的 db 中。

我在我的应用程序中遵循了埃文斯的例子,但我遇到了一些困难,希望你能帮助我。

我有一个 InvoiceDefinition 实体对象,它是一个聚合根。除此之外,它还有一个 InvoiceLine 类型的字段,它是一个值对象。InvoiceLine 不能独立于 InvoiceDefinition 存在。诀窍是 InvoiceLine 可以是叶子节点或树节点,其中包含子 InvoiceLine 值列表。所以它形成了一个递归结构。

这可以作为有效的值对象传递吗?如何使用休眠将这样的值对象存储在数据库中?

0 投票
1 回答
247 浏览

oop - 同一类中的 OOP 值对象和实体

我正在将一个旧的过程式 PHP 网站重构为一个美味的 OOP 应用程序,并带有少量领域驱动设计以增加风味。

我一直在偶然发现我需要可以具有子类的类的情况,这些子类要么是实体,要么是值对象。

例如,一个 url 对象。那里有无数的网址,所以它们都不能真正成为实体。但有些是非常特殊的 url,比如我的主页。那是一个实体。

另一个例子是“配置对象”。我希望一些配置具有身份,以便我可以创建“预设”并通过在线控制面板管理它们。对于那些需要查找器/存储库来找到它们,并且需要 ORM 来管理它们的生命周期。但是,对于其他“非预设”(具有相同的类层次结构),我希望能够使用动态定制且不需要持久化的数据加载它们。

我设想了很多:

这一切似乎有点奇怪。

是否有任何模式可以讨论处理此问题的最佳方法?

0 投票
1 回答
2012 浏览

php - 如何使用 PDO Prepare 语句执行 SELECT LIKE - 值对象在这里有用吗?

关键是要进行一个查询,该查询将获取用户在输入框中输入的值,并检索通过该关键字比较找到的数据库记录。

在 innodb 引擎上,没有 MATCH AGAINST 可用吗?我将在索引列表上使用LIKE ,希望没问题。

传统上我们会这样做:

因此,如果我们的查询字符串是 AB,我们将同时检索:“lab”和“abnormal” 精确吗?

1) 我们如何通过使用 PDO 来实现这一点?


思维:

就像是,

但接下来是什么?

通常我会这样做:

2) VO 对这种情况有什么用吗?

提前非常感谢!

0 投票
1 回答
1425 浏览

c# - 集装箱船问题

考虑这个例子:

现在,我希望 User 类具有 CompanyCode 属性。第一个明显的解决方案是简单地将 CompanyCode 属性放在 User 类上

现在这里的问题是冗余,因为公司类已经有一个属性 CompanyCode,有什么方法可以让用户只使用公司的 CompanyCode 属性而不继承公司类(这里的问题是 C# 不允许类的多重继承)或使用 ICompany 接口(但接口在值对象中很痛苦)。我正在考虑只将 Company 类包含到 User 类中,但我将只使用它的属性 CompanyCode。

像这样的东西..

但是,仅仅添加一个字符串属性 CompanyCode.. 需要你的建议。提前致谢..

0 投票
2 回答
678 浏览

java - “价值对象”一词的词源/含义是什么?

我是一名具有.NET / PHP背景的程序员。

我最近查看了有关Flashbuilder 4/ActionScript的视频培训。视频培训中的一个视频名为“使用值对象创建数据模型”。我提到“价值对象”对我来说是一个陌生的术语,并不真正知道他是否指的是“模型”,这有点令人困惑,因为我只能将其理解为“模型”但标题暗示我们正在创建一个带有值对象的模型,这表明它们是两个不同的实体。

培训师说,他被告知这是Java 中相当常见的术语,有时也称为“传输对象”。事实上,“值对象”的 Wikipedia 页面重定向到“数据传输对象”,像这样的 stackoverflow 问题提到“值对象”也可能是“ Java 中的映射对象”。

这个术语的词源是什么,它与其他与数据模型相关的术语有什么关系?它是否来自 Java 世界,是否在某个时候不再被广泛使用?

0 投票
1 回答
1035 浏览

nhibernate - Nhibernate Component Mapping:从数据库查询时,值对象中的父对象为空

我正在使用以下映射配置将我的值对象项映射为组件

我能够将数据插入数据库,但在通过产品 ID 检索时,项目行中的产品属性为空。

我是否需要在映射中传递任何引用>

请帮忙

谢谢,

三月

0 投票
3 回答
1509 浏览

nhibernate - 比较值对象的相等性时如何处理null?

注意:我以 C# 为例,但问题在 Java 和许多其他语言中几乎相同。

假设您实现了一个值对象(如M. Fowler 的值对象模式)并且它有一些可为空的字段:

然后,当覆盖 Equals() 时,当两个值对象的 MyField 都设置为 null 时,您如何处理这种情况?他们是平等的还是不平等的?

在 C# 中,将它们视为平等似乎很明显,因为:

  1. 当您使用 C# 结构而不是类并且不覆盖 Equals() 时,这是 Equals() 的行为。

  2. 以下表达式为真:

    /li>

但是,在 SQL 中(至少在 SQL Server 的方言中),NULL = NULL为假,而NULL is NULL为真。

我想知道使用 O/R 映射器(在我的例子中是 NHibernate)时需要什么实现。如果你实现“自然”的 C# 相等语义,当 O/R 映射器将它们映射到数据库时可能会有任何不良影响吗?

或者也许允许值对象中的可空字段是错误的?

0 投票
1 回答
449 浏览

c# - C# - Marshall by value 问题!

事情是这样的,我在使用远程机制“按值封送”创建新对象时遇到问题。

这是我的课:

但是当我尝试在另一个“appdomain”中创建对象时,“Empleado”的属性“_AppDomainHost”并没有显示我创建的“appdomain”,而是默认显示“appdomain”。一些想法?

结果:

DEMO_MBV_MBR.vshost.exe

MBV:DEMO_MBV_MBR.vshost.exe

我想要的结果:

DEMO_MBV_MBR.vshost.exe

MBV : 新应用域

0 投票
6 回答
14152 浏览

domain-driven-design - DDD 中的值对象 - 为什么是不可变的?

我不明白为什么 DDD 中的值对象应该是不可变的,我也看不出这是如何轻松完成的。(我专注于 C# 和实体框架,如果这很重要的话。)

例如,让我们考虑经典的 Address 值对象。如果您需要将“123 Main St”更改为“123 Main Street ”,为什么我需要构造一个全新的对象而不是说 myCustomer.Address.AddressLine1 = “123 Main Street”?(即使实体框架支持结构,这仍然是个问题,不是吗?)

我理解(我认为)值对象没有身份并且是域对象的一部分的想法,但是有人可以解释为什么不变性是一件好事吗?


编辑:我在这里的最后一个问题真的应该是“有人可以解释为什么应用于值对象的不变性是一件好事吗?” 对困惑感到抱歉!


编辑:为了澄清,我不是在询问 CLR 值类型(与引用类型相比)。我在问值对象的更高级别的 DDD 概念。

例如,这是一种为实体框架实现不可变值类型的 hack 方式: http ://rogeralsing.com/2009/05/21/entity-framework-4-immutable-value-objects 。基本上,他只是将所有二传手设为私有。为什么要这样做呢?