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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос к матерым об общей идее конструкторов [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Stierus Супермодератор
Отправлено: 21 Сентября, 2011 - 14:32:21
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
использование исключений для бизнес логики - прямой путь к спагетти коду в частонсти целой этажерке проверок что за исключение

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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
а потом парсить строку на содержание что бы понять, что с ней делать


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

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

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

я уже не говорю как такую бизнес логику отлаживать

(Отредактировано автором: 21 Сентября, 2011 - 14:48:03)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Stierus Супермодератор
Отправлено: 21 Сентября, 2011 - 14:49:33
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Если ошибка наперед известная - то и катч будет тоже 1 ... вы явно пытаетесь отмазаться Улыбка))
 
My status
 Top
MrBeard
Отправлено: 21 Сентября, 2011 - 14:50:19
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




caballero пишет:
Цитата:
а потом парсить строку на содержание что бы понять, что с ней делать


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

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

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

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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
если у вас одна ошибка(неверная комбинация логина и пароля), то и catch будет один.

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

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

if(_)

или


try{


...



}
catch{

}


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


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

или можно наоборот проверять что строка -
здесь два варианта и простой if

(Отредактировано автором: 21 Сентября, 2011 - 15:12:28)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Mad_Alex
Отправлено: 21 Сентября, 2011 - 15:10:58
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  
Откуда: Moscow


Помог: 0 раз(а)




Т.е. спор идет о том, что возвращать из статической функции?
И кошерно ли возвращать что-то неизвестного типа (объект или строку или бул)?
 
 Top
caballero
Отправлено: 21 Сентября, 2011 - 15:13:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
И кошерно ли возвращать что-то неизвестного типа


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

даже если не ваш - это PHP у него исходники перед глазами даже если нет описания функции это не скомпилированая библиотека


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
MrBeard
Отправлено: 21 Сентября, 2011 - 15:14:11
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




caballero пишет:
Цитата:
если у вас одна ошибка(неверная комбинация логина и пароля), то и catch будет один.

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


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

(Отредактировано автором: 21 Сентября, 2011 - 15:18:14)

 
 Top
Mad_Alex
Отправлено: 21 Сентября, 2011 - 15:18:26
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  
Откуда: Moscow


Помог: 0 раз(а)




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


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

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

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


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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
если говорить про конкретно этот случай, то catch будет один, потому что обычно абсолютно всё равно, какая причина помешала пользователю залогиниться,


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



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


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


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



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


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

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


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

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

(Отредактировано автором: 21 Сентября, 2011 - 15:28:13)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
MrBeard
Отправлено: 21 Сентября, 2011 - 15:39:15
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Цитата:
Это PHP приучает так писать безалаберно

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

это значит, что исключения развивают безолаберность, а нетипизированность возврата функций - наоборот, ведёт к духовному и профессиональному росту?)
 
 Top
Mad_Alex
Отправлено: 21 Сентября, 2011 - 15:39:38
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  
Откуда: Moscow


Помог: 0 раз(а)




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


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


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


К сожалению у меня такое только в виде счастливого исключения будет встречаться. Недовольство, огорчение
 
 Top
caballero
Отправлено: 21 Сентября, 2011 - 15:40:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




И не надо давать методам дурацкие названия типа check или valid
Логин есть login понятно что он делает


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Mad_Alex
Отправлено: 21 Сентября, 2011 - 15:42:36
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  
Откуда: Moscow


Помог: 0 раз(а)




caballero пишет:
если говорить про конкретно этот случай, то catch будет один, потому что обычно абсолютно всё равно, какая причина помешала пользователю залогиниться,

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


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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
если статик класса вернул что-то типа "не экземпляр" то значит бяда, что-то не так.


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


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


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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB