2whirlwind: если тупой юзер вася удалил каталог кеша, то поддержка сайта должна получить уведомление о том, что кеш умер, а пользователь должен получить данные из другого источника. И да, должен быть сгенерирован новый каталог кеша, или выделен участок памяти, или что либо еще, если есть такая возможность. Система по возможности должна быть сбоеустойчивой.
Пример 1:
Работа кеша. Кеширование реализовано с использованием общей памяти. Этот же класс используется для передачи системных сообщений.
Случай А: у нас сбой в работе кеша при генерации системного сообщения. С помощью set_err взведен влаг ошибки. Скрипт, вызвавший метод и проверивший после его вызова флаг ошибки вызывает исключение c помощью fire_err. Ошибка передана в назначеный разработчиком каллбек обработчик. Обработчк прерывает работу скрипта и выврдит сообщение о ошибке.
Случай Б: у нас сбой в работе кеша при попытке запросить данные, которые мы получаем с помощью запроса в бд. С помощью set_err взведен влаг ошибки. Скрипт, вызвавший метод и проверивший после его вызова флаг ошибки отправляет письмо в службу поддержки о том, что присутствует такая то ошибка. Скрипт получает данные из бд вместо кеша и пользователь продолжает работать ниочем не подозревая.
Класс кеша ничего не знает о том как обрабатывается ошибка и что с ней вообще происходит. Он только сообщает о ее наличии.
Класс обработки ошибок ничего не знает о том что вызвало ошибку, или как именно с ней обращатся. Все что он делает - хранит информацию о том что она есть и позволяет передать ее обработчику назначеному пользователю.
Обработчик уже решает, что с ней делать.
В зависимости от контекста нужно менять только сам обработчик. А вот классы кеша и обработки ошибок - трогать нет нужды.
Помоему это удобно, когда для изменения логики обработки ошибок нет нужды перебирать классы.
Помоему это удобно, когда в зависимости от контекста вызова функции можно решать как обрабатывать ошибку.
И таких примеров можно привести массу.
Класс должен выполнять только атомарный набор функций, который соответствует его назначению.
Класс кеша не должен ничего знать о обработке ошибок. Только умето сообщить о них.
Класс обработки ошибок должен только хранить информацию о ошибке и уметь передать ее обработчику и не должен ничего знать о том как именно ошибки обабатываются.
Обработчик ошибок должен только принимать информацию об ошибке и обрабатывать ее каким то обрабзом.
Помоему такое разделение логично.
-~{}~ 04.04.09 18:02:
PS. Вы только подумайте на сколько разбухает ваш код с этой обработкой ошибок. И в этом коде обработки ошибок столько же ошибок сколько и в любом другом вашем коде
Он разбухнет больше, если ошибки обрабатывать в каждом конкретном месте их возникновения. И станет практически невозможно такой код поддерживать.