Обработка ошибок в модели или в контроллере? - PullRequest
3 голосов
/ 12 июля 2010

Я расспрашивал по различным каналам IRC, но не смог получить ответ с точным объяснением. Должны ли ошибки (относящиеся к модели, такие как сбои транзакций) обрабатываться в модели или в контроллере?

Заранее спасибо за любую помощь.

EDIT

Что ж, смущает то, что мой код (в модели) уже выглядит примерно так:

try
{
    // Connect to MongoDB
    // Fetch a record
}
catch (MongoConnectionException $e)
{
    // Handle this error
}
catch (MongoException $e)
{
    // Handle this error
}

Итак, я должен возвращать исключения, основанные на исключениях, которые возвращает MongoDB? Или я должен прямо позволить этим исключениям пузыриться до контроллера?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 12 июля 2010

Правильный ответ: «Оба», но в основном в модели.

Для вашего контроллера нужно просто перехватить какое-то исключение, которое выбрасывает модель, и обработать вывод приятного сообщения "whups".В зависимости от того, как вы структурируете свои модели, для контроллера может быть целесообразно выполнить некоторую регистрацию.

Что-нибудь, кроме перехвата исключения, возможно, запись в журнал (если инфраструктура вашей модели не делает этого)), и, отображая красивую ошибку, не принадлежит вашему контроллеру.

2 голосов
/ 12 июля 2010

Ошибки, такие как сбой транзакции - и что делать в таких случаях - являются проблемами бизнес-логики.Таким образом, они должны обрабатываться в модели, и соответствующие уведомления передаются обратно в контроллер.

Полная модель, тощий контроллер.

0 голосов
/ 13 июля 2010

Идеи, лежащие в основе MVC, довольно просты и чрезвычайно гибки.Идея состоит в том, что у вас есть один контроллер (такой как index.php), который управляет запуском приложений в рамках на основе аргументов в запросе.Обычно это включает, как минимум, аргумент, определяющий, какую модель вызывать, событие и обычные аргументы GET.Оттуда контроллер проверяет запрос (аутентификацию, действительную модель, очистку запроса и т. Д.) И запускает запрошенное событие.

В настоящее время действительно есть только две истинные структуры ... и это может быть проблемойкодирование, поддержка и будущие выпуски.Тем не менее, существует множество платформ, которые расширяют себя для поддержки MVC.

На самых ранних этапах я хочу сказать и предположить, что текущие платформы, решения и поддержка ограничены из-за поспешных поставок и плохой документации.Кроме того, я предлагаю то, что работает для меня и работало для меня в прошлом.

Я бы сильно Этот сайт

0 голосов
/ 12 июля 2010

Скотт Гатри для ASP.NET C # предлагает использовать контроллер в качестве обработчика исключений.Он также предлагает настроить вспомогательные объекты и обработчики для проекта.Это, в свою очередь, позволяет продолжить разработку в обычном режиме.

Обратите внимание, однако, с PHP MVC все еще находится на ранних стадиях и в реализации, поэтому это может быть не идеально.

Я думаю, что как только вы решили, как справиться с решением, которое у вас все еще с ним, и последуете этому шаблону, как только вы приняли решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...