ruby-on-rails 我应该在何处以及如何处理多个异常?

gojuced7  于 2022-11-26  发布在  Ruby
关注(0)|答案(1)|浏览(94)

我在处理异常方面有问题。我知道如何处理,但我不确定在什么地方可以挽救它们。例如:

class ExampleService
  def call
    ...
    raise ExampleServiceError, 'ExampleService message'
  end
end

class SecondExampleService
  def call
    raise SecondExampleServiceError if something

    ExampleService.call
  rescue ExampleService::ExampleServiceError => e ---> should I rescue it here?
    raise SecondExampleServiceError, e.message
  end
end

Class ExampleController
  def update
    SecondExampleService.call
    
  rescue ExampleService::ExampleServiceError, SecondExampleService::SecondExampleServiceError => e
    render json: { error: e.message }
  end
end

正如您在示例中看到的,我有两个服务。ExampleService引发了自己的异常。SecondExampleService调用ExampleService,可以引发异常,并在ExampleController中使用。我应该在哪里救援ExampleServiceError?在ExampleController中还是SecondExampleService中?如果在ExampleController中,当我们在多个控制器中使用这样的服务时会怎样(救援代码将重复多次)?

j8ag8udp

j8ag8udp1#

当控制器仅直接调用SecondExampleService并且不知道关于ExampleService的任何事情时,则它不应该从ExampleServiceError进行救援。
只有SecondExampleService知道ExampleService是在内部使用的,因此SecondExampleService应该从ExampleServiceError中恢复并将其转换为SecondExampleServiceError
这就是我对law of demeter的解释。

相关问题