我正在研究一种使用DDD进行架构的解决方案。我的ViewModel中有一个属性,它指向一个ValueObject,视图模型也实现了INotifyPropertyChanged接口。当用户在前端输入数据时,ValueObject的值将发生变化。我遇到的问题是值对象被认为是不可变的。我该如何解决这个问题?提前谢谢。
答案 0 :(得分:2)
如果你可以编辑某些内容,那么必须有一个可变容器用于不可变值。因此,你的viewmodel应该作用于可变容器,而不是直接作用于不可变值。
整数是此类不可变值对象的示例:Int32
类型没有任何允许您更改对象状态的成员。您只能替换整数,而不能更改它。因此,整数的视图模型如下所示:
public MutableIntegerViewModel
{
private readonly mutableInteger;
public MutableIntegerViewModel(MutableInteger mutableInteger)
{
this.mutableInteger = mutableInteger;
}
public string DisplayText
{
get
{
return this.mutableInteger.Value.ToString(
CultureInfo.CurrentCulture);
}
set
{
this.mutableInteger.Value =
Int32.Parse(value, CultureInfo.CurrentCulture);
}
}
}
MutableInteger
就是这样:
public class MutableInteger
{
public int Value { get; set; }
}
我在这里省略了错误处理和更改通知,但希望你明白了。
另请注意,此示例与Customer
类的典型示例与FirstName
和LastName
没有什么不同。字符串也是不可变的,所以我们还有一个可变容器用于不可变值。