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 人工制品,但在逻辑域中它们更可能是逻辑对象的 属性,可能是驱动程序或其他东西。
视图模型是否应该直接包含模型,如下所示?
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 人工制品,但在逻辑域中它们更可能是逻辑对象的 属性,可能是驱动程序或其他东西。