我有一些模型,例如:RequestModel
public class RequestModel
{
public int RequestId { get; set; }
public int CategoryKey { get; set; }
public int SubCategoryKey { get; set; }
public int AreaKey { get; set; }
}
我用这个模型从一些html表单中获取输入。
CategoryKey
,SubCategoryKey
和AreaKey
是“类别”,“子类别”和“区域”值的代码。
出于展示目的,我需要展示CategoryValue
,SubCategoryValue
和AreaValue
。所以我在View中使用了相同的模型,并在其中添加了三个字段。
public class RequestModel
{
public int RequestId { get; set; }
public int CategoryKey { get; set; }
public int SubCategoryKey { get; set; }
public int AreaKey { get; set; }
public String CategoryValue { get; set; }
public String SubCategoryValue { get; set; }
public String AreaValue { get; set; }
}
我正在考虑将它与以下类分开:
public class RequestModel
{
public int RequestId { get; set; }
}
public class RequestInputModel : RequestModel
{
public int CategoryKey { get; set; }
public int SubCategoryKey { get; set; }
public int AreaKey { get; set; }
}
public class RequestDisplayModel : RequestModel
{
public int RequestId { get; set; }
public String CategoryValue { get; set; }
public String SubCategoryValue { get; set; }
public String AreaValue { get; set; }
}
你怎么看?真的有必要吗?你是否在类之间进行输入和显示类的分离?
答案 0 :(得分:1)
通用最佳实践是您在模型中拥有数据。即,您需要保存到文件或数据库的信息,然后在视图模型上有您的业务逻辑,这就像Fullname是First + Surname之类的东西,所以需要显示但不保存的数据 然后,您可以在顶部查看格式和样式输出
所以你会有
public class PersonModel
{
string firstName;
string Surname;
DateTime DateOfBirth
}
public class PersonDisplayViewModel
{
PersonModel Model;
string FullName
{
get{return Model.firstname + " " + Model.Surname;}
}
int Age
{
get{return (DateTime.Today() - Model.DateOfBirth).TotalYears;}
}
}
public class PersonEditViewModel
{
PersonModel Model;
string FirstName {
get{return Model.FirstName;}
set{Model.FirstName = value;}
}
string Surname{
get{return Model.Surname;}
set{Model.Surname= value;}
}
DateTime DateOfBirth{
get{return Model.DateOfBirth;}
set{Model.Surname= DateOfBirth;}
}
}
原因是相同的核心数据可能会在很多地方使用,例如,您有一个显示全名和年龄的搜索屏幕以及一个编辑屏幕,可让您编辑姓名和出生日期。他们拥有与人相同的核心数据,但他们以不同的方式呈现数据。还说你正在为学校做点什么,并希望确保学生年龄<16岁,但你也必须有> 18岁的员工。你不能把这个年龄过滤器放在人模型上,因为一个人可以是任何年龄,但是在视图模型上非常适合定义可以和不能写入下面模型的模型
如果您在美国有自己的应用程序版本,并希望使用美国日期格式,即mm-dd-yyyy但是英国的相同应用程序需要dd-mm-yyyy格式,这对视图也是如此对底层数据或业务逻辑的任何影响?不,它只是改变数据的外观,所以在veiw