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

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

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) Свой вариант)
  • Вопрос задан
  • 2209 просмотров
Решения вопроса 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, почему не вынесена в константу, если она так важна. Как будто вы пишите только для себя..
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект