0

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

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

毕竟如果我确信表示层永远不会改变,那么是否真的值得进行设计?

回答

1

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

关于验证逻辑的重复,没有解决方案可以满足所有情况,有时您必须接受一点重复才能降低总体复杂性并提高可维护性。在领域层做验证的最简单的方法是使用标准警卫并抛出ArgumentException实例。在ASP.NET MVC中,最简单的验证方法是使用数据注释属性。在一定程度上复制验证逻辑通常比实施全面验证系统更容易。此外,可能有验证只能由域层执行,这是保持它们分离的另一个参数。

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

相关问题