使用MVVM时,是否应该创建新的视图模型以不同的方式显示相同的模型?

时间:2013-10-24 16:00:32

标签: design-patterns mvvm

假设我有一个我想以多种方式显示的数据集。可能是电子表格和条形图。两个视图中模型中的数据相同。显然,观点必须不同。

但是,创建包含相同模型的不同视图模型更有意义,每个模型都处理特定于每个视图的功能,或者是否有一个以多种方式公开模型的视图模型?

如果每个视图模型中90%的功能相同,相应视图中的差异略有不同,该怎么办?

视图模型是否更多地耦合到视图或模型?

1 个答案:

答案 0 :(得分:3)

我不确定是否可以给你一个是/否答案。

这实际上取决于你的目标。

我认为创建不同的ViewModels没有任何错误。如果有90%的常用功能,并且您不想将其保留在一个ViewModel中 - 只需使用继承:

public class ParentViewModel: BaseViewModel
{
    protected readonly Model _model;
    public ParentViewModel(Model model)
    {
       _model = model;
    }
}

public class ExtendedViewModel
{
    public ExtendedViewModel(Model model): base(model)
    {
    }   
}

如果您愿意,此方法可帮助您分隔某些特定于View的属性。

另请注意,在开始向其中一个视图添加新功能后,您必须向ViewModel添加新代码。因此,您将获得一个ViewModel,它具有许多特定于网格的代码作为特定图表。这将违反Single Responsibility Principle

所以我的观点是你可以使用任何这些方法

  • 如果您的观看次数需要相同或几乎相同的属性
  • ,请使用相同的VM
  • 如果一个VM的代码只是另一个
  • 的子集,则使用继承
  • 如果您的视图以不同的方式运行,请使用两个不同的VM。此外,您仍然可以在基类中保留公共代码。