【发布时间】:2013-12-28 08:16:08
【问题描述】:
我正在从书 Pro ASP.NET MVC 4 中学习 ASP.NET MVC(顺便说一句,到目前为止我很喜欢)。
我还在开始的章节中,它向我展示了System.ComponentModel.DataAnnotations 命名空间属性,如何在我的模型类中添加这些注释,然后如何使用它们来检查模型是否有效(ModelState.IsValid in Controller)。
例如:
public class GuestResponse
{
[Required(ErrorMessage = "Please enter your name"]
public string Name { get; set; }
}
...
public ViewResult RsvpForm(GuestResponse guestResponse)
{
if(ModelState.IsValid)
{
return View("Thanks", guestResponse);
}
}
有几件事让我感到不安。
- 为什么我希望在我的域模型中散布一堆属性?我喜欢我的领域模型纯粹并且没有任何特定于实现的东西,任何现实世界的模型都太复杂而不能像这样使用声明式验证。
- 验证属性的
ErrorMessage参数是否与View有点相关?类似的东西不属于UI层吗?例如...如果由于空间限制我想要移动版本而不是说“请输入您的姓名”而是说“需要姓名”怎么办?但它在我的模型中! - 为什么要使用
ModelState.IsValid来判断模型的状态?模型不应该告诉我吗?我知道ModelState正在使用我的模型中是 的DataAnnotations属性,但这似乎只适用于非常简单的模型。更复杂的模型甚至可能没有有效/无效状态,它可能只有不同的阶段和状态。我在这里有点漫无边际,但我不喜欢声明性地说明是什么使我的模型有效或无效的想法。
对这些想法的任何建议、保证或验证将不胜感激。
【问题讨论】:
标签: asp.net-mvc-4 entity-framework-5 data-annotations separation-of-concerns