DataAnnotations 与 IDataErrorInfo
两者的优点和缺点?一个比另一个的好处?(尤其是与 MVC 相关的)
DataAnnotations 与 IDataErrorInfo
两者的优点和缺点?一个比另一个的好处?(尤其是与 MVC 相关的)
因为我不想开始一个新问题,所以迟到了讨论。我的出发点是确定应用于中型 ASP.NET MVC 项目的最佳实践。
让我先总结一下我们的选择:-
1) IDataErrorInfo 实现简单。您只需要在 Model 类中派生 IDataErrorInfo 即可。问题是你让你的模型绑定来执行你的业务规则。业务规则应由模型强制执行。IDataErrorInfo(同样适用于 DataAnnotations)的另一个问题是(从Steven Sanderson 的书中解释,它不能报告与单个属性相关的多个错误或与 whle 对象模型相关的多个错误。
2)对我来说,DataAnnotation 就像一个模式检查(验证)。这是您的应用程序应该做的第一个检查。但是(恕我直言),它不适合实施您的业务规则。
3)实现你自己的ModelBinder。虽然这可以做到,但认真地说,ModelBinder 的用途是解析数据并将其绑定到模型,而不是执行复杂的验证和业务规则检查。我会让业务规则检查在您的模型/域层中实现。
4)自己动手 - 使用服务层进行验证(请参阅this。所示示例具有使用接口类从控制器和模型状态解耦的优点。另一个选择是从模型层抛出适当的异常。后一种选择在单独的应用程序(例如 WCF 应用程序)中实现服务层时很有用。
你怎么看?对于大中型项目,您使用过(或打算采用)以上哪些选项,为什么?
干杯
看起来 DataAnnotations 在 MVC 2.0 中得到了官方支持。Scott Guthrie 发表了一篇关于在 2.0 中使用 DataAnnotations 进行模型验证的好文章。鉴于该团队似乎正朝着这个方向前进,您可能会认为这是对它的支持。
DataAnnotations 更容易实现,并在 MVC 2.0 中获得直接支持。
但是,IDataErrorInfo
允许您进行更复杂的验证(即:产生多个属性的验证等)。
但是,两者可以混合使用,也可以一起使用。没有什么能阻止您实施这两种技术。