我在处理异常方面有问题。我知道如何处理,但我不确定在什么地方可以挽救它们。例如:
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
中,当我们在多个控制器中使用这样的服务时会怎样(救援代码将重复多次)?
1条答案
按热度按时间j8ag8udp1#
当控制器仅直接调用
SecondExampleService
并且不知道关于ExampleService
的任何事情时,则它不应该从ExampleServiceError
进行救援。只有
SecondExampleService
知道ExampleService
是在内部使用的,因此SecondExampleService
应该从ExampleServiceError
中恢复并将其转换为SecondExampleServiceError
。这就是我对law of demeter的解释。