wpf - 值对象和 View 模型属性

标签 wpf mvvm domain-driven-design inotifypropertychanged

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

最佳答案

如果你可以编辑某些东西,那么必须有一个可变容器来存放不可变值。因此,你的 View 模型应该作用于可变容器而不是直接作用于不可变值。

整数是此类不可变值对象的示例:Int32 类型没有任何允许您更改对象状态的成员。您只能替换 一个整数,而不能更改它。所以一个整数的 View 模型看起来像这样:

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; }
}

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

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

关于wpf - 值对象和 View 模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2490038/

相关文章:

c# - WPF 转换器抛出对象引用未在设计时设置

domain-driven-design - 实体应该只包含修改状态的行为吗?

c# - 域对象和服务类对象应该放在哪里?

wpf - 标签 WPF 中的内容对齐

wpf - 在 TreeView 中拖放,在节点之间插入

c# - 处理 WPF 菜单 HeaderStringFormat 和访问键等

c# - 在 ViewModel 中取消 Hook 事件处理程序的正确方法是什么

mvvm - MVVM 模型应该是什么样的?

domain-driven-design - 为什么将命令和事件限制为一个集合? CQRS + ES + DDD

wpf - 从主窗口访问 ICommand : Josh Smith's Article