ViewModel 应该包含模型吗? (ASP.NET, Entity Framework)

Should ViewModels contain Models? (ASP.NET, Entity Framework)

视图模型是否应该直接包含模型,如下所示?

public class ViewModel
{
    public Car Car { get; set; }          // Car model
    public Driver Driver { get; set; }    // Driver model
    public Photo Photo { get; set; }      // Photo model

    public List<Skill> Skills { get; set; }   // List of Skill model
}

或者视图模型应该包含另一个视图模型:

{
    public CarViewModel CarViewModel { get; set; }
    public DriverViewModel DriverViewModel { get; set; }
    public PhotoViewModel PhotoViewModel { get; set; }

    public List<SkillViewModel> Skills { get; set; }
}

最佳做法是什么?

这取决于您在做什么,但通常情况下,第二个选项是最佳实践,假设 Viewmodel 中的所有对象都以某种方式实际显示在 View 中。

还要考虑到您的 ViewModel 项目代表 UI 上的事物,而模型代表业务逻辑。

因此,您的 UI-Artefacts(ViewModel 对象)不一定与一个域对象(业务逻辑对象)关联。

因此,在您的示例中, “照片”或“技能”在这方面似乎不是一个合乎逻辑的对象。

它们存在于要显示的 ViewModel 上,作为 UI 人工制品,但在逻辑域中它们更可能是逻辑对象的 属性,可能是驱动程序或其他东西。