值对象(ValueObject)- Martin Fowler博客

/**
 * 献给我最尊敬的偶像Martin Fowler
 * 原文出处:https://martinfowler.com/bliki/ValueObject.html
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-10
 */

本翻译已征得Martin Fowler同意,并链接在博客原文下方。

编程时,我发现把东西表示成一个组合物是很有用的。一个二维坐标由x和y组合。一定数量金额由一个数值和一种货币组成。一个日期范围由开始和结束日期组成,而日期又可以由年、月、日组成。

当我这样做的话,我就会遇到了两个组合物是否是一样的问题。假设我有两个都是表示笛卡尔坐标(2,3)的point对象,把他们当作是相等是有意义的。根据其属性来判断相等性的对象被称为值对象,在这里的属性就是他们的x和y坐标。

但除非我在编程时很小心,不然在我的程序里可能得不到那样的效果。

比如想在JavaScript表示一个坐标。

const p1 = {x: 2, y: 3};  
const p2 =

继续阅读»»»