开发与Presentation Layer无依赖关系的应用层?

时间:2011-07-31 11:42:43

标签: model-view-controller domain-driven-design service-layer presentation-layer

我正在学习一般发展策略,但我脑子里有很多关于它们的问题。其中之一是关于创建应该没有依赖关系表示层的应用层。 例如,在MVC应用程序中假设我们有应用程序服务,但此应用程序服务不检查来自表示层的传入数据模型的验证。它只通过ASP.NET MVC验证在控制器中检查,服务层也不包含任何授权内容。所有工作都在Presentation层完成。你认为这是正确的架构吗?我是否必须再次在服务层内包含所有验证和授权?如果你说是,但如何?

如何在服务层中包含授权?我真的不知道如何控制服务层内的变化。在服务层中复制验证可以吗?

毕竟,如果我确定表示层永远不会改变,那么设计真的值得吗?

1 个答案:

答案 0 :(得分:1)

验证应该在域层中。在DDD应用程序中,域(业务)层应该拥有验证,因为它最了解自己。服务层在域上运行,并且应该处理由域层引发的错误,包括验证错误。在这种情况下处理错误可能意味着将其包装在服务层异常中并返回错误代码,记录错误等。授权也应该是服务层的责任。这并不是说表示层(ASP.NET MVC)不应该执行验证或授权验证。表示层中的验证通常比域和服务层中的验证更轻量级,并且是为了改善用户体验而完成的。毕竟,如果大多数验证都可以在客户端执行,为什么不这样做并保存到服务层的旅程?同样的逻辑适用于授权。

关于验证逻辑的重复,没有解决方案可以满足所有情况,有时您必须接受一些重复,以降低整体复杂性并提高可维护性。在域层中进行验证的最简单方法是使用标准防护并抛出ArgumentException实例。在ASP.NET MVC中,最简单的验证方法是使用数据注释属性。通常,在某种程度上复制验证逻辑比实现全包验证系统更容易。此外,可能存在只能由域层执行的验证,这是将它们分开的另一个参数。

服务层中的授权可以通过多种方式完成,具体取决于所使用的基础技术。如果使用WCF,则有许多guidelines用于授权。