代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

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

  •  3
  • Edward Tanguay  · 技术社区  · 14 年前

    我是一个程序员 .NET/PHP 背景。

    我最近看了一个视频培训 FlashBuilder 4/操作脚本 . 视频培训中的一个视频名为“ 使用值对象创建数据模型 “。我提到过” 价值对象性 “对我来说是一个陌生的词,不知道他是不是真的这么说的” 模型 “或者没有,这有点令人困惑,因为我只能把它理解为一个“模型”,但是标题表明我们正在创建一个模型 具有 一个值对象,表示它们是两个不同的实体。

    教练说他被告知这是 Java中常见的术语 有时也被称为 传输对象 “。事实上,“value object”的维基百科页面重定向到 数据传输对象 “,以及StackOverflow问题,例如 this one 提到“值对象”也可能是 Java中的映射对象 “。

    这个术语的词源是什么?它如何与其他与数据模型相关的术语相关?它来自Java世界吗?它在某个时候被广泛使用了吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   aioobe    14 年前

    这个词在不同的上下文中似乎超载了。 Misko Hevery describes 我解释的术语是:

    可注入类可以在其构造函数中请求其他可注入项。(有时我称注射物为 服务对象 ,但该术语已超载。)[…]下面是一些我希望从DI框架中获得的类的示例:creditcardprocessor、musicplayer、mailsender、offlinequeue。

    类似地,newables可以在其构造函数中请求其他newables,但不能用于注入项(有时我将newables称为 值对象 ,但同样,这个术语是重载的)。一些新能源的例子是: 电子邮件、邮件、用户、信用卡、歌曲 . 如果您保持这种区别,您的代码将易于测试和使用。如果你打破这个 规则您的代码将很难测试。

    我同意的另一种描述是 http://c2.com/cgi/wiki?ValueObject

    价值对象的例子是 数字、日期、金钱和字符串 . 通常,它们是应用相当广泛的小物体。他们的身份是基于他们的状态而不是他们的对象身份。这样,您就可以拥有同一概念值对象的多个副本。

    所以我可以有一个对象的多个副本,它代表1998年1月16日。这些副本中的任何一份都将相等。对于这样的小对象,通常更容易创建新对象并移动它们,而不是依赖单个对象来表示日期。

    一个值对象在Java中总是重写.RealSalm()(OR=在Simultalk中)。(还记得重写.hashcode()。

        2
  •  2
  •   SteveD    14 年前

    我在2010年的日本动物园,在那里凯夫林·亨尼发表了一个关于“物体价值”的演讲——我强烈推荐 watching reading 演示文稿(包括价值对象)。对于我来说,有太多的内容不容易总结,但我的解释是:

    值对象

    表示模型中信息的对象。它没有标识并且是不可变的。例如,日期2010年10月13日可以表示为值对象。它没有身份,2010年10月13日永远是2010年10月13日——永远不会改变。

    如果你有机会的话,我也建议你亲自去听凯夫林。我发现他是个非常好的演讲者。

    您可能还想查看Eric Evan的域驱动设计书,因为我相信这是Java世界中价值对象概念的现代来源。