Rat*_*lad 10 c# asp.net-mvc asp.net-mvc-4
我有一个名为的商业模式Product,并Category像下面我在其中添加了验证:
public class Product
{
public int ProductId {get; set;}
[Required]
[StringLength(25)]
public string Name {get; set;}
public string Description {get; set;}
public int CategoryId {get; set;}
}
public class Category
{
public int CategoryId {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
对于视图模型,我创建了这样的东西:
public class ProductViewModel
{
public Product Product {get; set;}
public IList<Category> Categories {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我的一位朋友建议在视图模型中保留所有验证,并在视图模型中映射业务模型的所有属性,如下所示:
public class ProductViewModel
{
public int ProductId {get; set;}
[Required]
[StringLength(25)]
public string Name {get; set;}
public string Description {get; set;}
public int CategoryId {get; set;}
public IList<SelectListItem> CategoryDropdownValues {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我告诉他这种方法对上述方法的好处,他不是很确定.但他坚持认为,您不应直接在视图中使用商业模式,只应验证查看模型.
我的问题:
你的朋友是对的。关于您的问题
有用户输入验证和业务规则验证。大多数情况下,输入验证是业务规则验证的一部分,但是在 ASP.NET MVC 中,框架会自动执行该验证。为了防止重复,这意味着 UI 验证应该使用业务验证。这可以通过 FluentValidations 轻松完成(IMO 数据注释太严格)。
因此,在这种情况下,UI 布局是在 UI 级别上使用业务模型验证完成的。
视图模型总是至少在一定程度上依赖于业务模型,但两者并不相同。它们是具有不同用途的不同模型,因此应将它们分开。事实上,您的视图模型可能与业务(数据结构)模型 90% 相同,这只是一个巧合。我们希望将每个模型保留在自己的层中,而它们恰好具有相同的属性。
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |