作为我的域类,我有Person和FavoritePerson类,如下所示。
public class CompanyPerson : ICompanyPerson
{
[Key]
public Guid PersonId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
public class CompanyFavoritePerson : IFavoritePerson
{
[Key]
public Guid FavoritePersonId { get; set; }
[Column(TypeName = "datetime2")]
public DateTime CreateDate { get; set; }
public Guid? CompanyPerson_PersonId { get; set; }
[StringLength(128)]
public string CompanyUser_UserId { get; set; }
public virtual CompanyPerson CompanyPerson { get; set; }
public virtual CompanyUser CompanyUser { get; set; }
}
在我的网络应用程序中,我需要显示收藏人员列表。所以我的视图模型是这样的;
public class FavoritePersonViewModel
{
public Guid FavoritePersonId { get; set; }
public DateTime CreateDate { get; set; }
public Guid? CompanyPerson_PersonId { get; set; }
public string CompanyUser_UserId { get; set; }
//Option1: PersonViewModel PersonViewModel {get; set; }
//Option2: public string Title {get;set;}
}
因为我需要在列表中显示最喜欢的用户的标题(标题属于Person类)哪种方式与最佳实践相匹配?
从另一个viewModel引用viewModel或使用所需的额外属性扩展viewModel并将它们填入业务层?
答案 0 :(得分:1)
经过对此主题的更多研究;我发现了这个问题 What is ViewModel in MVC? 明确指出:
视图模型可以组合来自不同数据库实体的值。
如下所示;
现在,您将Employees和Departments表中的数据合二为一 查看模型。然后,您将需要添加以下两个 属性到视图模型并用数据填充它:
public int DepartmentId { get; set; }
public IEnumerable<Department> Departments { get; set; }
所以我选择了选项2.
答案 1 :(得分:1)
ViewModel模式只是属于“Separated Presentation Pattern”存储桶的众多模式之一。
在设计ViewModel之前,考虑视图的要求非常重要。例如,如果视图中有两个小部件,并且每个小部件都有自己的ViewModel,则复合ViewModel适用于这种情况,但如果视图只是一个使用多个域类的视图,那么是否每个小组都有View模型,复合ViewModel不合适,因为它增加了复杂性,一个ViewModel中的每个更改都可能破坏您的代码。
因此,根据您的问题
作为我的域类,我有Person和FavoritePerson类。
因为我需要在列表中显示最喜欢的用户的标题(标题属于Person类)。
在我看来,复合ViewModel不是一个好选择,你应该设计一个新的ViewModel。