我这里有太多的WPF图层吗?

时间:2013-12-07 16:39:01

标签: wpf mvvm

我想我正在走向最终的MVVM。我只是在看我发现自己的情况,我想知道是否应该将我的两个图层组合起来。我目前有这样的结构:

  1. 域模型(在单独的.net项目中)
  2. 包装域模型和跟踪脏状态的WPF端“模型”
  3. WPF ViewModels
  4. 浏览
  5. 问题是我是否应该组合2和3.现在#2是我的中介传递的层,以便于所有视图模型知道当前打开的文档。但我认为我的2和3代码太相似,而且此时是不必要的重复。

    示例:

    // in layer 2, class ProjectDocument
    // Project is an instance of the domain model
    public string Name
    {
        get { return Project.Name; }
        set
        {
            if (Project.Name == value) return;
            Project.Name = value;
            Dirty = true;
        }
    }
    
    // in layer 3, class ProjectSettingsViewModel
    // _project is a ProjectDocument
    public string Name
    {
        get { return _project.Name; }
        set
        {
            _project.Name = value;
            OnPropertyChanged("Name");
        }
    }
    

    看到这让我感到不必要。我应该把它们结合起来吗?一方面,它会删除大量的冗余代码,当我改变时,我会有更少的更新位置。另一方面,我可能会给一个类太多的责任,而且实际的ViewModel通过我的中介传递给其他VM似乎也不合适。 ProjectSettingsViewModel如果合并,ProjectDocument上的字段甚至不会使用一半。

    也许我正在以错误的方式看待这个问题。是否有更好的方法来减少重复,同时仍然将责任分开?

1 个答案:

答案 0 :(得分:0)

我有一个主视图模型,可以处理应用程序状态,例如哪个文档/选项卡/窗口是打开的,我有一个ISettingssService来满足其他全局需求。不鼓励将一个视图模型传递给另一个视图模型,您可能想要考虑创建可以注入视图模型的iSettings服务,然后视图模型可以与“全局”设置交互,但视图模型仍然是分离的,因为它们不依赖于另一个视图模型

所以,我不会把它们结合起来。要么我有一个文档字典,可以在主视图模型中使用当前打开的doc属性打开,或者将此逻辑移动到每个视图模型使用的服务/接口。

希望这有帮助。