design-patterns - 使用MVVM时,是否应该创建新的 View 模型以不同方式显示同一模型?

标签 design-patterns mvvm

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

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

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

View 模型是否与 View 或模型更耦合?

最佳答案

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

这真的取决于您的目标。

在创建其他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的属性。

还要记住,在开始向其中一个 View 中添加新功能之后,您必须向 View 模型中添加新代码。结果,您将获得一个ViewModel,它具有许多特定于网格的代码作为特定于图表的代码。那将违反Single Responsibility Principle

所以我的意思是,您可以使用以下任何一种方法
  • 如果您的 View 需要相同或几乎相同数量的属性,请使用同一VM
    如果一个VM的代码只是另一个
  • 的子集,
  • 使用继承
  • 如果 View 的行为不同,请使用两个不同的VM。同样,您仍然可以将通用代码保留在基类中。
  • 关于design-patterns - 使用MVVM时,是否应该创建新的 View 模型以不同方式显示同一模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570909/

    相关文章:

    c# - ListView 中的 WPF 按钮在 ViewModel 中看不到命令

    ios - 使用数组将多个参数传递给函数

    java - 在 JTable 中显示来自数据库的数据

    xaml - 如何更改 xaml Datagrid 中数据标题的字体大小和样式

    c# - 为什么我的 ListView 没有绑定(bind)到 ItemSsource?

    c# - 在WinRT MVVM中无法执行按钮单击和组合框选择更改

    c# - 使用 Catel 将验证从模型传播到 View

    c# - 如何根据键值对创建对象

    java - 设计模式-多观察者

    asp.net-mvc - ASP.NET MVC - Controller 中应该存在业务逻辑吗?