Куда бросить Exception в моем многоуровневом приложении, используя Service Layer? - PullRequest
1 голос
/ 03 мая 2011

Мне интересно, куда мне бросить, поймать исключение в моем приложении Zend Framework + Doctrine 2.

Вот мой дизайн:

База данных - MySQL> ORM (Doctrine2)>Сервис> Контроллер

My Service принимает служебный объект в качестве аргумента и возвращает объект ответа службы почти для всех методов.

Ответ службы возвращает состояние, сообщения и данные, которые могут быть любыми.

Мои контроллеры используют эти сервисы.

Мне интересно, куда я должен выбросить свое исключение.

Пример:

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 голосов
/ 05 июля 2011

Я обычно через свои исключения как можно глубже в коде (в этом случае это будет внутри репозитория), а затем ловлю их там, где это будет наиболее подходящим. В этом случае, я думаю, что наиболее подходящим вариантом было бы перехватить его в Сервисе, а затем вернуть ServiceResponse со статусом ошибки (в противном случае вы бы только возвращали сообщения об успехе, что сделало бы ServiceResponse своего рода избыточным).

...