每次我开始处理新的ASP.NET MVC Web应用程序时,我不确定是否使用DataAnnotations
验证。有些事情感觉不对。DataAnnotations或在服务中手动验证?
例如,假设我有一个UserService
,它从AccountController
的Create
操作中通过CreateUserModel
。为确保用户始终提供名称,我将模型的Name
属性设置为具有[Required]
属性。我现在是安全的,除非它有一个名字,否则模型联编程序永远不会给我一个CreateUserModel
。
我的问题是,我的UserService
是我系统的一个可重用组件,它不能依赖上述层提供有效数据的事实,而且肯定也必须验证此数据。当您考虑您可能要编写一个完全重用UserService
(并且没有模型联编程序为其进行所有数据注释验证)的Web服务时,需要进一步突出显示这一点。
所以我的问题是:这种情况的最佳做法是什么?使用数据注释进行验证并在服务中重复验证?仅在服务中验证并抛出异常?两者的混合?
我希望我的问题不是太主观,我主要试图建立一个关于是否将验证移动到数据注释最终会让我最终咬伤我的共识。
这就是我们所做的,除了我们将IValidationDictionary传递给作为ModelState包装器实现的服务层,以便服务层能够直接向ModelState添加错误,但不会依赖于ASP.NET MVC。然后控制器不需要担心管理向ModelState添加返回的错误。 – 2010-11-24 21:16:50