0

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

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

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

视图模型与视图或模型更耦合?

4

1 回答 1

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)
    {
    }   
}

如果需要,此方法将帮助您分离某些特定于视图的属性。

还要记住,在您开始向其中一个视图添加新功能后,您必须向视图模型添加新代码。结果,您将获得一个 ViewModel,其中包含许多特定于网格的代码作为特定于图表的代码。这将违反单一责任原则

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

  • 如果您的视图需要相同或几乎相同数量的属性,请使用相同的 VM
  • 如果一个 VM 的代码只是另一个 VM 的子集,则使用继承
  • 如果您的视图以不同的方式运行,请使用两个不同的 VM。此外,您仍然可以将通用代码保留在基类中。
于 2013-10-24T16:13:15.810 回答