wpf - 在Wpf MVVM中使用非贫血症域模型

标签 wpf mvvm model domain-driven-design dns

我正在使用针对UI的MVVM实现基于WPF的应用程序。

我有一个ViewModel,它包装了每个可以编辑的可编辑模型。 VM包含用于处理错误通知,“脏”管理等的所有逻辑。

此设计为 anemic (即不包含任何逻辑)的简单域模型对象提供了很好的CRUD方案。

现在,我面临一个更加棘手的问题,因为我有一个包含逻辑的域模型,并且该逻辑可以更改域模型的内部状态。

有人已经面对过这种情况吗?如果是这样,您是否有一些建议可以正确处理此问题?

里安娜(Riana)

最佳答案

这是我通常的处理方式:

  • ViewModel层由属于该层的类型组成,这意味着我永远不会在ViewModel内直接使用我的业务对象。我将我的业务对象映射到ViewModel对象,这些对象可能或可能不是完全相同的形状减去行为。可以说这违反了“不要重复自己”,但是这样做可以使您遵守“单一责任原则”。我认为,SRP通常应胜过DRY。存在ViewModel以服务于 View ,并且存在模型以服务于业务规则/行为。
  • 我创建一个外观/服务层,该层将ViewModels作为参数并返回,但是将ViewModels与其对应的业务对象版本相互映射。这样,非贫乏对象就不会在ViewModel
  • 上施加非 View 逻辑

    依赖关系如下所示:
    ViewModel <-> Facade/ServiceLayer->业务对象

    我认为,要释放MVVM的全部潜力,请记住这一点,这一点很重要: ViewModel是 View 的模型/抽象,而不是呈现给 View 的模型。

    关于wpf - 在Wpf MVVM中使用非贫血症域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466398/

    相关文章:

    java - 多个字段中有一个必填字段的Json

    c# - 在 ViewModel 中存储信息或使用 IValueConverter

    python - Django 将多个模型传递给模板

    c# - 只读指定span

    wpf - DataGrid 选项卡导航跳过列

    javascript - 我是否总是使用 Knockout 映射插件来制作我的 View 模型,从而过度使用它?

    WPF 数据模板教程

    java - neo4j modell 与 n 个属性的关系 vs n 与一个属性的关系

    c# - 将分层数据模型绑定(bind)到 DataGrid

    不显示透明 winform 内的 WPF 控件