2009-09-20 2 views
6

Мне было интересно, что за исключением стандартного для обработки ошибок в модели.Обработка ошибок в модели (MVC)

В настоящее время у меня есть методы «setError» и «getError», которые используются всеми моими моделями.

Это означает, что я беспокоюсь только о том, является ли вызов метода в моей модели истинным или ложным. Если это неверно, я бы использовал $this->model->getError() в моем контроллере.

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

ответ

3

Простым решением было бы использовать exceptions.

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

например:

throw new UserError("That object no longer exists."); 

При возникновении ошибки, которую вы хотите скрыть от пользователя, введите другой вид исключения, возможно, названный InternalError. Вы хотите, чтобы log это и разрешить программе продолжать, поэтому конкретная ошибка скрыта от пользователя. Если это предотвратит что-то, вам может потребоваться генерировать общее сообщение об ошибке. Это были бы ошибки, и вы хотите исправить их как можно скорее.

.:

например
throw new InternalError("Failed to connect to remote service"); 

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

+0

Мне нравится эта идея, единственное предостережение - если есть несколько ошибок, в идеале я хочу записать ошибку в продолжение выполнения. Поэтому почему я использовал setError и getError. Я проверяю, является ли возвращение истинным, что означает, что все действия были успешными, а если нет, я получаю ошибку. Действие my будет частично успешным, и в результате я хотел бы вернуть false и использовать getError для получения сообщения о том, какая часть была неудачной. Надеюсь, что имеет смысл. – Andre

1

Я использую log4j и log4cxx и записывается в syslogd. Kiwi - это простой системный журнал Win32, который будет отслеживать ваши сообщения журнала и сохранять их в файле. Log4j/Log4cxx имеют конфигурационные файлы, которые вы можете использовать для настройки всех уровней журнала или мест назначения сообщений журнала (вы можете зайти в несколько мест).

Для настройки и использования требуется так мало усилий, и это работает как шарм.

Я не пробовал log4php сам.

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

1

Просмотрите NerdDinner учебник о том, как создавать процедуры проверки, прежде чем принимать окончательное решение:

http://nerddinnerbook.s3.amazonaws.com/Part3.htm

Оценочная часть составляет около 2/3 пути вниз страницы.

Смежные вопросы