服务层验证 - 抛出异常或具有包装器ServiceResponse类型

时间:2017-07-09 08:14:45

标签: n-tier-architecture service-layer application-design

这是一个通用的架构问题,而不是代码示例或特定代码解决方案的请求。

在多层应用程序中,我们有两个主要的处理服务层验证选项:

  1. 服务层抛出了Presentation层应该捕获和处理的异常。
  2. 这种方法的

    PRO 是轻量级服务层签名,但另一方面,有可能在各地抛出异常的开销,因为异常本身并不是人们可能想要的最便宜的选项。重新考虑这个选项。

    1. 介绍ServiceResponse包装类型
    2. 类型可能类似于(伪代码):

      class ServiceResponse{
          boolean IsOk;
          array ErrorMessages;
          object OkResponse;
      }
      

      这也符合REST服务(虽然问题不在于它们),其中Http响应消息实际上充当ServiceWrapper及其StatusCode和Content。

      您更喜欢在服务层中使用哪种方法?为什么?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您的服务层就是您在UI层中注入或依赖的某种库。在这个级别抛出异常会更好。如果你决定**物理上分离**服务层并通过API层(REST)公开它。您始终可以在API层捕获这些异常,并使用正确的http代码和异常消息返回http响应。所以是的,坚持开始时的例外。