3

我正在研究一种将 DDD 用于架构的解决方案。我的 ViewModel 中有一个指向 ValueObject 的属性,该视图模型还实现了 INotifyPropertyChanged 接口。ValueObject 的值会随着用户在前端输入数据而改变。我遇到的问题是值对象应该是不可变的。我该如何解决这个问题?先感谢您。

4

1 回答 1

2

如果您可以编辑某些内容,那么不可变值必须有一个可变容器。因此,您的视图模型应该作用于可变容器而不是直接作用于不可变值。

整数就是这种不可变值对象的一个​​示例:该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; }
}

我在这里省略了错误处理和更改通知,但希望你能明白。

另请注意,此示例与具有 a和 a的Customer类的典型示例并没有真正的不同。字符串也是不可变的,所以我们再次为不可变值提供了一个可变容器。FirstNameLastName

于 2010-03-22T14:06:52.183 回答