7

DataAnnotations 与 IDataErrorInfo

两者的优点和缺点?一个比另一个的好处?(尤其是与 MVC 相关的)

4

3 回答 3

7

因为我不想开始一个新问题,所以迟到了讨论。我的出发点是确定应用于中型 ASP.NET MVC 项目的最佳实践。

让我先总结一下我们的选择:-

1) IDataErrorInfo 实现简单。您只需要在 Model 类中派生 IDataErrorInfo 即可。问题是你让你的模型绑定来执行你的业务规则。业务规则应由模型强制执行。IDataErrorInfo(同样适用于 DataAnnotations)的另一个问题是(从Steven Sanderson 的书中解释,它不能报告与单个属性相关的多个错误或与 whle 对象模型相关的多个错误。

2)对我来说,DataAnnotation 就像一个模式检查(验证)。这是您的应用程序应该做的第一个检查。但是(恕我直言),它不适合实施您的业务规则。

3)实现你自己的ModelBinder。虽然这可以做到,但认真地说,ModelBinder 的用途是解析数据并将其绑定到模型,而不是执行复杂的验证和业务规则检查。我会让业务规则检查在您的模型/域层中实现。

4)自己动手 - 使用服务层进行验证(请参阅this。所示示例具有使用接口类从控制器和模型状态解耦的优点。另一个选择是从模型层抛出适当的异常。后一种选择在单独的应用程序(例如 WCF 应用程序)中实现服务层时很有用。

你怎么看?对于大中型项目,您使用过(或打算采用)以上哪些选项,为什么?

干杯

于 2010-06-09T22:30:58.353 回答
5

看起来 DataAnnotations 在 MVC 2.0 中得到了官方支持。Scott Guthrie 发表了一篇关于在 2.0 中使用 DataAnnotations 进行模型验证的好文章。鉴于该团队似乎正朝着这个方向前进,您可能会认为这是对它的支持。

于 2010-01-20T18:15:14.310 回答
4

DataAnnotations 更容易实现,并在 MVC 2.0 中获得直接支持。

但是,IDataErrorInfo允许您进行更复杂的验证(即:产生多个属性的验证等)。

但是,两者可以混合使用,也可以一起使用。没有什么能阻止您实施这两种技术。

于 2010-01-20T18:24:36.533 回答