我有50多个基本数据类,并且希望使用一致的方法以3种或4种不同格式显示这些类。简单类显示模板与视图模型
我知道大多数专家建议使用ViewModels
。有的甚至recommend one per view。
但是,通过直接在数据模型上直接使用不同的DisplayTemplates
,创建/维护的代码肯定会少一些。
例如,比较这3个apporaches:
1:没有的ViewModels,使用DisplayTemplates不同的格式
class Person
{
public int ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
public string FavouriteColour {get;set;}
public string FavouriteBand {get;set;}
}
@Html.DisplayFor(m => m.Person, "Simple")
@Html.DisplayFor(m =>m.Person, "Full")
这似乎是最简单的选择,用最少的代码创建和维护。
2:只使用一个ViewModel当从数据模型
class Person
{
public int ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
public string FavouriteColour {get;set;}
public string FavouriteBand {get;set;}
}
class PersonSimpleViewModel
{
public int ID {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
}
@Html.DisplayFor(m => m.Person)
@Html.DisplayFor(m => m.PersonSimpleViewModel)
此偏差将需要额外的VM用于每一个实体,和一个系统的像AutoMapper或ExpressMapper使用/配置。
我觉得它不必要地增加了复杂性。另外,x由50个实体组成,它创建/维护的代码更多。
3:视图模型为每个显示格式
class Person
{
public int ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
public string FavouriteColour {get;set;}
public string FavouriteBand {get;set;}
}
class PersonSimpleViewModel
{
public int ID {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
}
class PersonFullViewModel
{
public int ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string NickName {get;set;}
public string Nationality {get;set;}
public string FavouriteColour {get;set;}
public string FavouriteBand {get;set;}
}
@Html.DisplayFor(m => m.PersonSimpleViewModel)
@Html.DisplayFor(m => m.PersonFullViewModel)
这个选项需要最代码,而且感觉很傻,因为Full
VM是相同的数据模型。
但是我宁愿超过2,因为它是一致的 - 每种显示格式都有相应的虚拟机,数据模型无处可见。
谢谢。我正在尝试创建**一致的基础结构**,我可以在创建应用程序时遵循该基础结构。所以一方面我想保持灵活性和'最佳实践'。另一方面,我不想让自己为添加的每个实体创建一百万个虚拟机(略微夸张)。 –
在这种情况下,我只谈论简单的通用实体 - 例如社交个人资料网址,联系人表单收件人,网页标记。较大/复杂的实体可能会为每个应用定制。 –