【问题标题】:In the MVVM design pattern, should models contain other models?在 MVVM 设计模式中,模型是否应该包含其他模型?
【发布时间】:2018-09-04 03:53:41
【问题描述】:

我认为我没有见过这样的例子,但我也没有读到任何明确声明不应该这样做的地方。例如,假设我有一些用户模型,其中包含常见的东西,如名字姓氏等:

public class UserModel
{
    private int userID;
    public int UserID
    {
        get { return userID; }
    }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string MiddleInitial { get; set; }

    ...

}

如果我要严格遵循 MVVM 模式,是否允许拥有例如其他模型的列表

public class UserModel
{
    ...
    public List<SomeOtherModel> SomeList { get; set; }

}

或者模型应该只有简单类型?

【问题讨论】:

  • 是的,没关系,否则会很麻烦
  • 让视图模型包含集合是非常好的,也很常见。
  • 是的。您可能会感到困惑的是,一个虚拟机是否应该包含另一个虚拟机?当暴露直接 V 不关心的子 VM 时,复合 VM 没有任何意义。另外,这有点像在 VM 中放置过多的业务逻辑

标签: c# mvvm xamarin.forms


【解决方案1】:

很简单,是的。

在进行 MVVM 时,您需要稍微改变一下观点。 “模型”的定义与 MVC 不同,而是包含所有不是视图和视图模型的内容。这意味着“模型”是一个数据实体(即 POCO),它包括任何服务或控制器,它包括业务逻辑等:

型号

MVVM 中的模型是应用程序域模型的实现,其中包括数据模型以及业务和验证逻辑。模型对象的示例包括存储库、业务对象、数据传输对象 (DTO)、普通旧 CLR 对象 (POCO) 以及生成的实体和代理对象。

引自MSDN文章The MVVM Pattern

既然您已经改变了观点,如果您的问题变成POCO (DTO) 是否应该包含其他 POCO?,那么答案仍然是。 p>

【讨论】:

  • 与 MS 对最佳实践的定义相反,POCO 是一种最佳实践 - 没有应用层的类; 不包含业务逻辑。 BL 也不应该进入虚拟机。无论 MVVM 宗教如何,总有 SOLID 原则可供遵循
  • @MickyD 同意,一旦 POCO 中包含业务逻辑,它就会成为业务对象。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2013-08-06
  • 2010-09-09
  • 2016-11-29
  • 2013-01-19
  • 2011-11-07
  • 2019-05-31
相关资源
最近更新 更多