![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
awebtech |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.2.2011 Репутация: нет Всего: нет |
Преположим у нас есть "иерархия" объектов, построенная через композицию. Существует ли подходящий паттерн, позволяющий передавать ошибки из вложенных объектов в объекты, находящиеся на уровень выше ?
Просто складывается ощущение, что куча addErrors(), getErrors() на каждом уровне не есть правильно. Про исключения в курсе, только не понимаю как их можно применить в данном случае и стоит ли вообще. Ошибка бизнес логики не предполагает критичесого завершения приложения, такую ошибку надо просто отметить и продолжать работу дальше (не прерывать цикл/метод/не вылетать на уровень выше). Заранее спасибо за любые ответы. Небольшой пример того, что кажется неудобоваримым:
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
awebtech, вне что-то кажется, что у вас одни и те же ошибки много раз отмечаются.
Вы вызываете 2 раза addError для ошибки "Account is missing". Если бы у вас был лог-файл, в нем бы получилось 2 дублирующихся записи. Как посоветовал skyboy, используйте класс-логгер. Отлавливайте им ошибки только неполсредственно в момент их возникновения. А там, где ошибка может возникнуть выше, просто делайте return (завершайте выполнение текущей функции) с указанием ошибки, но без логирования. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
awebtech |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.2.2011 Репутация: нет Всего: нет |
Вот тоже думал в эту сторону, спасибо за мнение. Добавлено через 6 минут и 53 секунды Ага, забыл в примере return добавить. Отдельный логгер пока выигрывает. Есть еще идея унаследоваться всем от одного класса и использовать уже эту базу в качестве логгера ? Как думаете, стоит ? |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Вот пример. Это только пример, на ошибки не тыкать - не проверял, написал на скорую руку. Для полевых условий он не предназначен =)
Ошибки логгируются в момент возникновения. На верхних уровнях только остановка процесса. Если что-то там не получилось - просто смотрим лог и узнаем в каком месте ошибка. При желании в логгер можно добавить довольно широкий функционал, позволяющий взаимосвязивать ошибки в разных объектах. Это сообщение отредактировал(а) Arantir - 27.11.2012, 19:41 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
imho - нет. Можно посмотреть на достаточно навороченные cms-ки. У Yii, например есть скелетный статический класс (Yii), который может добраться до остальных частей смс, также он хранит связующие элементы, а есть "мясо" - классы типа СWebApplication и так далее, которые уже делают то, что надо. Все общие части - дебагеры, логеры и фабрики объектов находятся в скелете. Отнаследоваться не имеет смысла, так как логер обязан быть единственным на все приложение, а так получится по логеру в каждом объекте. В Javascript это можно было бы сделать ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |