DataAnnotations 与 IDataErrorInfo
两者的优缺点?
一个比另一个的好处? (尤其与MVC相关)
最佳答案
由于我不想开始一个新问题,所以迟到了讨论。我的出发点是确定适用于中型 ASP.NET MVC 项目的最佳实践。
让我先总结一下我们的选择:-
1)IDataErrorInfo易于实现。您只需要在 Model 类中派生 IDataErrorInfo 即可。问题在于您让模型绑定(bind)来执行您的业务规则。模型应该强制执行业务规则。 IDataErrorInfo(以及 DataAnnotations)的另一个问题是(从 Steven Sanderson's book 转述,它无法报告与单个属性相关的多个错误或与整个对象模型相关的多个错误。
2)DataAnnotation 对我来说,就像一个模式检查(验证)。这是您的应用程序应该执行的第一项检查。但是(恕我直言),它不适合实现您的业务规则。
3) 实现你自己的 ModelBinder。虽然这可以做到,但认真地说,ModelBinder 的用途是解析您的数据并将其绑定(bind)到您的模型,而不是执行复杂的验证和业务规则检查。我会让业务规则检查在您的模型/域层中实现。
4)自己动手 - 使用服务层进行验证(请参阅 this 。显示的示例具有使用接口(interface)类从 Controller 和模型状态解耦的优点。另一种选择是从模型层抛出适当的异常。后一个选项在单独的应用程序(例如 WCF 应用程序)中实现服务层时非常有用。
你怎么看?对于大中型项目,您使用(或打算采用)上述哪些选项,为什么?
干杯