Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос к матерым об общей идее конструкторов [2]
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Вопрос к матерым об общей идее конструкторов

Страниц (4): « 1 [2] 3 4 »
 

16. Stierus - 21 Сентября, 2011 - 14:32:21 - перейти к сообщению
Цитата:
использование исключений для бизнес логики - прямой путь к спагетти коду в частонсти целой этажерке проверок что за исключение

Чем отлов исключения принципиально добавляет макаронности той же самой проверке вернувшейся из функции переменной? вы реально считаете, что проверять на is_string, а потом парсить строку на содержание что бы понять, что с ней делать (логировать или пользователю выводить) удобнее чем отловить исключение, в котором будет код и тип ошибки помимо сообщения? Я правда не понимаю, о чем мы спорим Улыбка
17. caballero - 21 Сентября, 2011 - 14:42:26 - перейти к сообщению
Цитата:
а потом парсить строку на содержание что бы понять, что с ней делать


Зачем парсить? Вы знаете что это ошибка при чем ошибка наперед известная (неверныая комбинация логина или пароля) вот и выводите

а пятиэтаэный
catch(...)
catch(...)
catch(...)
catch(...)
catch(...)

в каждой функции чем лучше

я уже не говорю как такую бизнес логику отлаживать
18. Stierus - 21 Сентября, 2011 - 14:49:33 - перейти к сообщению
Если ошибка наперед известная - то и катч будет тоже 1 ... вы явно пытаетесь отмазаться Улыбка))
19. MrBeard - 21 Сентября, 2011 - 14:50:19 - перейти к сообщению
caballero пишет:
Цитата:
а потом парсить строку на содержание что бы понять, что с ней делать


Зачем парсить? Вы знаете что это ошибка при чем ошибка наперед известная (неверныая комбинация логина или пароля) вот и выводите

а пятиэтаэный
catch(...)
catch(...)
catch(...)
catch(...)
catch(...)

в каждой функции чем лучше

если у вас одна ошибка(неверная комбинация логина и пароля), то и catch будет один.
А получение экземпляра класса User и его проверка в коде на принадлежность к этому классу вызывают недоумение.
Меня вообще с момента начала изучения слегка напрягает возможность возвращать смешанное значение в PHP, это подразумевает, что после вызова функции я должен ещё и проверять, что же она мне вернула... неприятно.
20. caballero - 21 Сентября, 2011 - 15:04:23 - перейти к сообщению
Цитата:
если у вас одна ошибка(неверная комбинация логина и пароля), то и catch будет один.

во первых не один - у вас могут быть иклблючения по работе с БД

во вторых что проще и читабельнее

if(_)

или


try{


...



}
catch{

}


Цитата:
А получение экземпляра класса User и его проверка в коде на принадлежность к этому классу вызывают недоумение.


вы проверяете не принадлежность а что это класс (можно использовать is_class) а не строка

или можно наоборот проверять что строка -
здесь два варианта и простой if
21. Mad_Alex - 21 Сентября, 2011 - 15:10:58 - перейти к сообщению
Т.е. спор идет о том, что возвращать из статической функции?
И кошерно ли возвращать что-то неизвестного типа (объект или строку или бул)?
22. caballero - 21 Сентября, 2011 - 15:13:59 - перейти к сообщению
Цитата:
И кошерно ли возвращать что-то неизвестного типа


чего оно неизвестное если это ваш код

даже если не ваш - это PHP у него исходники перед глазами даже если нет описания функции это не скомпилированая библиотека
23. MrBeard - 21 Сентября, 2011 - 15:14:11 - перейти к сообщению
caballero пишет:
Цитата:
если у вас одна ошибка(неверная комбинация логина и пароля), то и catch будет один.

во первых не один - у вас могут быть иклблючения по работе с БД


если говорить про конкретно этот случай, то catch будет один, потому что обычно абсолютно всё равно, какая причина помешала пользователю залогиниться, результат один - в логине отказано. а если нужно обрабатывать разные ситуации, то catch будет больше, но и IF в вами предложенном решении будет больше ( в самом деле, не будете же вы писать пользователю, что у вас база данных померла.)
по поводу читаемости - тоже прихожу к мысли, что try{}catch{} становится читабельнее, потому что ожидаешь, где искать обработку ошибок, а не выискиваешь её в каждом встречном if.
и catch(SQLException e) выглядит, кстати, красивее, чем if(!is_class($variable) and $variable =="не удалось выполнить запрос");
24. Mad_Alex - 21 Сентября, 2011 - 15:18:26 - перейти к сообщению
caballero пишет:
Вообще в конструкторе не принято выполнять действия которые могут вызывть ошибку или исключение (ходить в базу например) - задача конструктора - проинициализировать члены класса.


И вот тут тоже что-то не понял.
А если объект это лютое сочетание 5-ти запросов к БД? Где мне все эти запросы делать?

Ну как пример: а что если это экземпляр скажем такого милого класса как "cisco"? Улыбка
С бородой интерфейсов (которые ессно достаются из других таблиц) и таких не менее веселеньких экземпляров класса channel?
Где, как не в конструкторе их все инициализировать?

-------------------------------- -
Хотя идея со статикой ГУД!
(Добавление)
caballero пишет:
чего оно неизвестное если это ваш код


Интуитивно хочется запихнуть всю сложную логику внутрь класса и забыть. А потом уже с "понтом под зонтом" экземплярами жонглировать. Хорошо
Т.е. хочется только помнить что у каждого класса есть статический метод типа check который вернет либо обьект, либо сигнал о проблеме. Вопрос в том в каком виде этот сигнал получать. Хотелось бы конечно однообразия и однообразия академического.
25. caballero - 21 Сентября, 2011 - 15:26:17 - перейти к сообщению
Цитата:
если говорить про конкретно этот случай, то catch будет один, потому что обычно абсолютно всё равно, какая причина помешала пользователю залогиниться,


Не все равно
ошиька БД это одно
неверный пароль это другое
пароль верный но expired это третье



Цитата:
А если объект это лютое сочетание 5-ти запросов к БД? Где мне все эти запросы делать?


В методе логин и делаете где же еще? Этот метод выполняет конкретную функцию в бизнес-логике. Количество запросов не имеет значения


Цитата:
Где, как не в конструкторе их все инициализировать?



если кроме инициализации переменных класса - то есть присвоения им значения производятся еще какието действия вычисления и т.д. тогда конечно нужен конструктор
в данном случае речь шла о присвоении полей таблицы БД полям класса
(Добавление)
Цитата:
Т.е. хочется только помнить что у каждого класса есть статический метод типа check который вернет либо обьект, либо сигнал о проблеме.


да, только сигнал это не исключение которое будет поймано неизвестно где
а если оно поймано тут же то на фига оно надо если можно обойтись IF

Цитата:
Хотелось бы конечно однообразия и однообразия академического.


нужно пользоватсыя здравым смыслом и пракьтическим опытом а н не выкладками теоретиков
(Добавление)
Это PHP приучает так писать безалаберно

писали бы вы на С++ такие ноимера бы не прошли
выкинули исключение с класса а класс остался в памяти
(знаменитая memory leak)
через пару дней бы сервер остался без памяти а еще пару дней бы ушло найти где проблемма
26. MrBeard - 21 Сентября, 2011 - 15:39:15 - перейти к сообщению
Цитата:
Это PHP приучает так писать безалаберно

писали бы вы на С++ такие ноимера бы не прошли
выкинули исключение с класса а класс остался в памяти
(знаменитая memory leak)
через пару дней бы сервер остался без памяти а еще пару дней бы ушло найти где проблемма

это значит, что исключения развивают безолаберность, а нетипизированность возврата функций - наоборот, ведёт к духовному и профессиональному росту?)
27. Mad_Alex - 21 Сентября, 2011 - 15:39:38 - перейти к сообщению
caballero пишет:
да, только сигнал это не исключение которое будет поймано неизвестно где а если оно поймано тут же то на фига оно надо если можно обойтись IF


Не, с мнением что исключение это не гуд в данном случае я согласен.
Наверное ОБЩИМ для всего можно признать принцип: если статик класса вернул что-то типа "не экземпляр" то значит бяда, что-то не так.


caballero пишет:
в данном случае речь шла о присвоении полей таблицы БД полям класса


К сожалению у меня такое только в виде счастливого исключения будет встречаться. Недовольство, огорчение
28. caballero - 21 Сентября, 2011 - 15:40:43 - перейти к сообщению
И не надо давать методам дурацкие названия типа check или valid
Логин есть login понятно что он делает
29. Mad_Alex - 21 Сентября, 2011 - 15:42:36 - перейти к сообщению
caballero пишет:
если говорить про конкретно этот случай, то catch будет один, потому что обычно абсолютно всё равно, какая причина помешала пользователю залогиниться,

Не все равно
ошиька БД это одно
неверный пароль это другое
пароль верный но expired это третье


+100500!!
Причем логин юзера это случай "детский".
30. caballero - 21 Сентября, 2011 - 15:44:14 - перейти к сообщению
Цитата:
если статик класса вернул что-то типа "не экземпляр" то значит бяда, что-то не так.


Да, но что именна за бяда вы уже знаете метод уже это определил тут ничего не надо делать просто вернуть сообщение клиенту
это не исключительная ситуация


Цитата:
К сожалению у меня такое только в виде счастливого исключения будет встречаться.


Скорее всего это результат неудачной архитектуры
Но никаких проблем нет
собсвенно никто не мешает пользоватся и конструкторами и прямым присвоением

 

Powered by ExBB FM 1.0 RC1