2

我们有一个简单的域模型:Contact、TelephoneNumber 和 ContactRepository。联系人是实体,它有一个身份字段。TelephoneNumber 是典型的值对象:没有任何标识,不能与 Contact 实例分开加载。

另一方面,我们有用于操作联系人的 Web 应用程序。第一页是“ContactList”,下一页是“Contact/C0001”,显示联系方式和电话号码列表。

我们必须实施电话号码编辑表格。第一个近似的想法是添加一些可导航的页面,如“ThelephoneNumber/T0001”。

但是 ThelephoneNumber 是 Value Object 类,无法通过这种方式识别其实例。

解决此问题的最佳做法是什么?我们如何识别无状态应用程序中的不可识别对象?

4

4 回答 4

2

值对象状态是否标识了该特定实例?如果不是,您可以在提交编辑表单时传回旧值和新值,然后将任何具有旧状态的对象更新为新状态。

我宁愿有一个像 Contact/C0001/ThelephoneNumber 这样的页面,并使用联系人 id 和值对象类来标识您要更改的实例。

除非我完全误解了你的要求。

于 2008-09-16T13:41:25.880 回答
0

我会让 TelephoneNumber 只包含一堆数字(可能是复数),并以这种方式引用它:Contact/C0001/TelephoneNumber(s)

于 2008-09-16T13:41:40.500 回答
0

在实践中,我总是发现给电话号码一个身份更容易,即使这在设计方面并不是绝对必要的。

如果它是一个不能存在于联系人上下文之外的严格值对象,则表明良好的用户界面可能会要求在联系人页面内而不是在其自己的页面上编辑电话号码。

但是,如果您决定反对这两种方法中的任何一种,我认为 Marc Gear 的解决方案是一个很好的解决方案。

于 2008-09-16T13:45:40.240 回答
0

尽管很多人希望你相信,但你不可能是 100% 纯洁的。

您的值对象需要某种身份字段。有时它对于像电话号码这样的对象来说是独一无二的,有时它必须是人造的,比如 TelephoneNumber.Id。

您越早接受这一点,对您就越好:-)

于 2008-09-16T14:42:25.860 回答