我试图在我的应用程序中实现验证策略。我有一个MVC层,服务层,存储库和域POCO。现在在MVC层,我在我的视图模型上使用数据注释来验证用户输入,从而让我给用户快速反馈。在控制器中,在使用automapper设置域对象之前,我调用ModelState.IsValid来检查输入。服务层验证
这是我的麻烦所在。我将我的域对象传入需要根据业务规则进行验证的服务,但是如何将验证错误传递回控制器?我找到的示例执行以下操作之一:
- 在服务层中抛出异常并捕获Contoller。但这似乎是错误的,肯定例外情况是例外,我们应该返回一些有意义的东西。
- 使用ModelStateWrapper并将ModelStateDictionary注入到服务中。但是这种方法最终展现为循环依赖(控制器依赖于服务,服务依赖于控制器),这似乎是一种糟糕的代码异味。
- 将验证方法添加到POCO。与此相关的问题是业务规则可能依赖于其他POCO对象,所以必须在可访问所需表和对象的服务中完成。
有没有更简单的方法我缺少?我已经看到很多关于这个问题的问题,但除了上面提到的问题外,没有具体的解决方案我在考虑在服务中进行验证的任何方法都可以传回一些我可以在控制器中使用的键/值对象,但我不确定这种策略是否会在稍后出现问题。
您可能会发现以下答案有用:http://stackoverflow.com/a/4851953/29407 –
感谢达林,这看起来很有前途,虽然它确实用于Exception方法。这是通常被接受的方式吗? – James