在哪里使用服务层在我的分层应用程序中抛出异常?

时间:2011-05-02 21:09:28

标签: php exception-handling service error-handling software-design

我想知道我应该扔哪里,在我的Zend Framework + Doctrine 2 MVC应用程序中捕获异常。

这是我的设计:

数据库 - MySQL> ORM(Doctrine2)>服务>控制器

我的服务在参数中获取服务对象,并为几乎所有方法返回服务响应对象。

服务响应返回状态,消息和数据,可以是您想要的任何内容。

我的控制器会消耗这些服务。

我想知道我应该在哪里抛出异常。

示例:

public function getAllMembers(ServiceObject $data)
{
  // do some mapping with $data
  $users = $userRepository->getAllMembers($data);
  $response = new ServiceResponse('success');
  $response->setData($users);

  return $response;
}

我应该检查我的服务中的参数,然后抛出我的控制器可以捕获的异常,或者我应该投入,让我们说这个示例的我的存储库,并抓住我的服务以允许我返回一个ServiceResponse错误状态?

有关此类架构的任何反馈意见?

1 个答案:

答案 0 :(得分:0)

我通常通过我的例外深入到代码中(在这种情况下,它将在存储库中),然后在最合适的地方捕获它们。在这种情况下,我认为最合适的做法是在服务中捕获它,然后返回一个带有错误状态的ServiceResponse(否则你只会返回成功消息,这会使ServiceResponse类型冗余)。 / p>