我正在学习一般发展策略,但我心中有很多问题。其中之一是关于创建不应该有依赖的应用层表示层。例如,在MVC应用程序中,假设我们有应用程序服务,但是这个应用程序服务不检查来自表示层的传入数据模型的验证。它只能通过ASP在控制器中检查。. NET MVC验证服务层也不包括任何授权的东西。所有的工作都在表示层完成。你认为那是正确的建筑吗?我必须再次在服务层中包含所有验证和授权吗?如果你说是,但怎么说呢??
服务层如何包含授权?我真的不知道如何控制服务层内部的授权。在服务层重复验证也可以吗?
验证应该在域层。在DDD应用程序中,域(业务)层应该拥有验证,因为它最了解自己。服务层在域上操作,并且应该处理由域层引发的错误,包括验证错误。在这种情况下,处理错误可能意味着将其包装在服务层异常中,并返回错误代码,记录错误,等等。授权也应该是服务层的职责。这并不是说表示层(ASP。. NET MVC)不应该执行验证或授权验证。表示层中的验证通常比域层和服务层中的验证更轻量级,其目的是改善用户体验。毕竟,如果大多数验证可以在客户端执行,为什么不这样做,从而节省到服务层的时间呢?同样的逻辑也适用于授权。
关于验证逻辑的重复,没有解决方案可以满足所有情况,有时你必须接受一点重复来降低整体复杂性并提高可维护性。在域层进行验证的最简单方法是使用标准保护并抛出ArgumentException实例。在ASP。NET MVC中最简单的验证方法是使用数据注释属性。在某种程度上,复制验证逻辑往往比实现一个包罗万象的验证系统更容易。此外,可能存在只能由域层执行的验证,这是将它们分开的另一个理由。
服务层中的授权可以通过多种方式完成,并且取决于所使用的底层技术。如果使用WCF,有许多关于授权的指导方针。