值对象和视图模型属性

时间:2010-03-22 04:33:53

标签: wpf mvvm domain-driven-design inotifypropertychanged

我正在研究一种使用DDD进行架构的解决方案。我的ViewModel中有一个属性,它指向一个ValueObject,视图模型也实现了INotifyPropertyChanged接口。当用户在前端输入数据时,ValueObject的值将发生变化。我遇到的问题是值对象被认为是不可变的。我该如何解决这个问题?提前谢谢。

1 个答案:

答案 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类的典型示例与FirstNameLastName没有什么不同。字符串也是不可变的,所以我们还有一个可变容器用于不可变值。