Задать вопрос

Где лучше качество кода?

С коллегой вечный холивар о качестве кода.
Вот один из примеров.
Оцените пожалуйста, как правильней писать в подобных кусочках)

1)
if (!$_SESSION['isMobileOnly']) {
    $opinionList = $dao->getOpinionList($bar['id']);
} else {
    $opinionList = $dao->getOpinionList($bar['id'], 3);
}


2)
$opinionList = $dao->getOpinionList($bar['id'], $_SESSION['isMobileOnly'] ? 3 : null);


3) Свой вариант)
  • Вопрос задан
  • 2215 просмотров
Подписаться 8 Простой 3 комментария
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Все плохо
  • Глобальные переменные — зло
  • На лицо некий код, который и с сессией работает и с БД — явное нарушение общепринятных принципов, например SRP
  • $dao как инициализирована? Явно не через конструктор
  • Использование цифры, вот сиди гадай по ней — это плохо, используйте именованную константу. Например 3 — это некий статус для desktop, вот и назовите ее STATUS_DESKTOP, хотя далее...
  • вы обращаетесь к одному методу, который шибко умный — работает с флагами, тем самым нарушая SRP и сам содержит if/else, сделайте просто 2 раздельных метода:
    getMobileOpinionList()
    getDefaultOpinionList()

  • Предикат лучше вынести в отдельный метод isMobileOnly(), тк условия могут поменяться в нем, не будете же везде в if менять по всему проекту
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Immortal_pony
@Immortal_pony Куратор тега PHP
$deviceCode = $_SESSION['isMobileOnly'] ? 3 : null;
$opinionList = $dao->getOpinionList($bar['id'], $deviceCode);
Ответ написан
@dkar007
Первый вариант визуально проще разобрать, чем второй.
Ответ написан
Комментировать
polyanin
@polyanin
Golang, PHP & Symfony developer
Oбернуть сессию в объект, использовать типы везде, где это возможно.

См. https://symfony.com/doc/current/components/http_fo...

p.s. число 3 вынести в именованную константу.
Ответ написан
Комментировать
Adamos
@Adamos
В порядке увеличения энтропии:
$opinionList = $dao->getOpinionList(
    $bar['id'], 
    $_SESSION['isMobileOnly'] ? 3 : null
);
Ответ написан
Комментировать
Ни один! Что за число 3, почему не вынесена в константу, если она так важна. Как будто вы пишите только для себя..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽