我想我正在走向最终的MVVM。我只是在看我发现自己的情况,我想知道是否应该将我的两个图层组合起来。我目前有这样的结构:
问题是我是否应该组合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
上的字段甚至不会使用一半。
也许我正在以错误的方式看待这个问题。是否有更好的方法来减少重复,同时仍然将责任分开?
答案 0 :(得分:0)
我有一个主视图模型,可以处理应用程序状态,例如哪个文档/选项卡/窗口是打开的,我有一个ISettingssService来满足其他全局需求。不鼓励将一个视图模型传递给另一个视图模型,您可能想要考虑创建可以注入视图模型的iSettings服务,然后视图模型可以与“全局”设置交互,但视图模型仍然是分离的,因为它们不依赖于另一个视图模型
所以,我不会把它们结合起来。要么我有一个文档字典,可以在主视图模型中使用当前打开的doc属性打开,或者将此逻辑移动到每个视图模型使用的服务/接口。
希望这有帮助。