Философский спор на тему проверки результата полученного из модели [Решено]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Философский спор на тему проверки результата полученного из модели [Решено]

Сообщение nepster »

К примеру есть запрос и нужно проверить получение данных.
Я всегда делал так:

Код: Выделить всё

$item = Item::find()->where(...)->one();
if($item) {
  // есть запись 
}
Теперь я работаю над проектом в команде и там настоятельно просят делать дополнительные проверки на тип данных, например:

Код: Выделить всё

$item = Item::find()->where(...)->one();
if(is_object($item) && $item) {
  // есть запись 
}
Аргументируя тем, что результат модели может быть не объект а что-то другое, ну скажем произошел лаг, глюк и тп.

Вопрос такой, действительно ли нужно усложнять проверку, так как может что-то пойти не так ? Кто-то натыкался на подобное ?
Последний раз редактировалось nepster 2014.12.26, 10:32, всего редактировалось 1 раз.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Философский спор на тему проверки результата полученного из модели

Сообщение anton44eg »

а разве любой объект автоматом не будет true?
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Философский спор на тему проверки результата полученного из модели

Сообщение nepster »

так вроде

Код: Выделить всё

if($item) 
это и есть неявная проверка на null.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Философский спор на тему проверки результата полученного из модели

Сообщение lynicidn »

nepster писал(а):так вроде

Код: Выделить всё

if($item)
это и есть неявная проверка на null.
не совсем, null это ответ когда нет записи
правильнее (если вдруг потом к примеру расширять и будет отдавать null или false при каких либо обстоятельствах

т.е. правильнее if ($model !== null)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Философский спор на тему проверки результата полученного из модели

Сообщение slavcodev »

Если делаются тесты, то ставить проверки чтоб следить за программистом лишнее. Проверка ставятся на действия пользователя, или в местах где программа может повести себя по разному. А не для каждого метода, что он там возвращает.
Если программист следит за тем чтоб не изменять интерфейс классов, зная что one() возвращает либо модель либо null и ничего не может больше вернуть, опять же проверка лишняя. Беда в том что в Yii2, действительно, методы могут возвращать разные форматы данных, в случая с one() например, это может быть модель или массив. Так что нужно быть внимательно при программировании.

И напоследок мне больше нравится проверять так

Код: Выделить всё

if ($item instanceof Item) {
}
тем самым мы даже подсказываем IDE что в переменной и помогаем с автодополнением.
Жду Yii 3!
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Философский спор на тему проверки результата полученного из модели

Сообщение nepster »

это да, тут имеется ввиду может ли быть форс-мажорная ситуация, где скажем по какой-то причине вернулся не объект или массив модели, а вернулся true ? Скажем просто потому, что какое-то исключение не сработало.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Философский спор на тему проверки результата полученного из модели

Сообщение lynicidn »

slavcodev писал(а):Если делаются тесты, то ставить проверки чтоб следить за программистом лишнее. Проверка ставятся на действия пользователя, или в местах где программа может повести себя по разному. А не для каждого метода, что он там возвращает.
Если программист следит за тем чтоб не изменять интерфейс классов, зная что one() возвращает либо модель либо null и ничего не может больше вернуть, опять же проверка лишняя. Беда в том что в Yii2, действительно, методы могут возвращать разные форматы данных, в случая с one() например, это может быть модель или массив. Так что нужно быть внимательно при программировании.

И напоследок мне больше нравится проверять так

Код: Выделить всё

if ($item instanceof Item) {
} 
тем самым мы даже подсказываем IDE что в переменной и помогаем с автодополнением.
это идеально, но будет зависимость на интсанцию, т.е. use появится ради такой проверки, хотя для ide не надо phpDoc внутри такой констркукции, но вс же я предпочитаю сравнивать с null

уже много раз писал - повторюсь - лучше белый список, чем черный, Слава правильно написал - это белый список, !==null это черный, т.е. запрещаем только null
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Философский спор на тему проверки результата полученного из модели

Сообщение anton44eg »

если дела уже настолько плохи, то ваша проверка проблемы не решит :)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Философский спор на тему проверки результата полученного из модели

Сообщение slavcodev »

lynicidn писал(а):use появится ради такой проверки
И? Какие-то проблемы с этим? Может ты не сталкивался, но use никак не убивает производительность, потому что при use класс не импортируется, можешь попробовать написать use не существующего класса и запустить php код. Класс подгружается autoloader только на момент когда используется.
Жду Yii 3!
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Философский спор на тему проверки результата полученного из модели

Сообщение lynicidn »

не люблю во вью phpDoc только параметры которые передаются
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Философский спор на тему проверки результата полученного из модели

Сообщение lynicidn »

имхо вьюха не должна содержать логики, сравнение инстанс или еще чего, снулл да - есть или нет
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Философский спор на тему проверки результата полученного из модели

Сообщение nepster »

не это проверка скорее в контроллере на правильную выборку. Тоесть use модели в любом случае есть.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Философский спор на тему проверки результата полученного из модели

Сообщение lynicidn »

да, в твиге же не будешь велесопедить или в другом шаблонизаторе
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Философский спор на тему проверки результата полученного из модели

Сообщение nepster »

так пока данные дойдут до вида, можно их в контроллере перепроверить. Тоесть в шаблонах уже неявные проверки вполне пойдут.

Изначально спор был в том, может ли пойти что-то не так и выпасть неожиданное значение, ну как в 99% продуктах майкрософта.
Аватара пользователя
denisOgr
Сообщения: 133
Зарегистрирован: 2012.02.02, 13:18
Контактная информация:

Re: Философский спор на тему проверки результата полученного из модели

Сообщение denisOgr »

Мне кажется сравнение с нулл или empty() будет достаточно.
Если бояться что что то пойдет не так, то, как сказал товарищ выше, это не поможет)
Если у Ваших коллег есть подозрения что что то будет не так, то пусть покажут их(так мы у себя поступаем) , что например может другое быть.
Если модель будет расширяться, то тот кто расширяет должен придерживаться правила(например, возвращать нулл или объект ну или что то что уже внутри обговорить)
Если бояться что что то "будет не так" с результатами фрейморка то зачем его вообще использовать и делать проверку на все его результаты)
Ответить