域对象表示属性

时间:2014-11-24 11:36:44

标签: oop domain-driven-design

假设在我的域中我有一个Money(amount, Currency(name))值对象(例如:new Money(1000, new Currency('USD')))。 但是在我的表示层(并且只有那里)我不想使用USD货币名称,而是使用符号($)。 我不想用表示属性重载我的值对象(因为除了符号之外,还可以有诸如放置之类的东西)。

你们如何处理这种映射?我应该创建某种CurrencyPropertyInMemoryRepository并从那里获取所有信息吗?我有什么选择?

1 个答案:

答案 0 :(得分:0)

我理解您担心要将此演示文稿方面与域数据分开,如果您想这样做,我认为使用存储库将货币名称映射到其符号可能是一个很好的解决方案(检索然后可以在ValueConverter中完成正确的符号,例如,在您的UI中显示之前转换模型数据。)

但我个人也不会将这些额外的符号信息存储在货币价值对象中,原因有两个:

  1. 货币符号与货币本身高度相关,因此每当货币名称发生变化时,符号也可能会发生变化。因此,将两种信息存储在相同位置或至少彼此非常接近是有意义的。使用其他存储库时,您的信息至少会在两个地方传播。
  2. 如果您的值对象中同时包含两个信息,您还可以在值对象中添加其他行为(例如,并非每种货币都有符号,在这种情况下,您需要一些逻辑来决定要打印的内容)。