【发布时间】:2012-01-19 05:49:48
【问题描述】:
我正在尝试在我的应用程序中实施验证策略。我有一个 MVC 层、服务层、存储库和域 POCO。现在在 MVC 层,我在我的视图模型上使用数据注释来验证用户输入,从而让我能够给用户快速反馈。在控制器中,我调用 ModelState.IsValid 来检查输入,然后再使用 automapper 设置域对象。
这就是我的麻烦所在。我将我的域对象传递给需要根据我的业务规则对其进行验证的服务,但是如何将验证错误传递回控制器?我发现的示例执行以下操作之一:
- 在服务层中抛出异常并在控制器中捕获。但这似乎是错误的,当然例外是针对特殊情况的,我们应该返回一些有意义的东西。
- 使用 ModelStateWrapper 并将 ModelStateDictionary 注入到服务中。但是这种方法最终会展开成循环依赖(控制器依赖于服务,服务依赖于控制器),这似乎是一种不好的代码味道。
- 向 POCO 添加验证方法。这样做的问题是业务规则可能依赖于其他 POCO 对象,因此这肯定应该在有权访问所需表和对象的服务中完成。
我是否缺少更简单的方法?我已经看到了很多关于这个的问题,但除了上面提到的之外没有具体的解决方案。我认为服务中任何进行验证的方法都可以只传回一些我可以在控制器中使用的键/值对象,但我不确定这个策略以后是否会出现问题。
【问题讨论】:
-
您可能会发现以下答案很有用:stackoverflow.com/a/4851953/29407
-
感谢达林,这看起来很有希望,尽管它确实适用于异常方法。这是普遍接受的方式吗?
标签: asp.net-mvc asp.net-mvc-3 validation