Для чего в проектах принудительно используют use?

Достался проект и специалист ведущий его попросил использовать везде use и не использовать в коде полные пути.

Не хочется пространными вопросами дёргать человека в отпуске, поэтому вопрос всемогущему all'у - для чего так делать?

Минусы как бы очевидны:

1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.

2 Код становиться длиннее - там где было бы просто:
\Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);

приходится писать:
use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);


4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
use Project\Exceptions\IblockNotFoundException;
use Project\Reviews\Dto\CreateReviewDto;
use Project\Reviews\ReviewsReactionService;
use Project\Reviews\ReviewsService;
use Project\SiteSettings;
use Framework\Main\Application;
use Framework\Main\ArgumentException;
use Framework\Main\Data\ManagedCache;
use Framework\Main\Engine\ActionFilter\Authentication;
use Framework\Main\Engine\ActionFilter\Csrf;
use Framework\Main\Engine\Contract\Controllerable;
use Framework\Main\Engine\Controller;
use Framework\Main\ObjectPropertyException;
use Framework\Main\Request;
use Framework\Main\SystemException;
use Exception;

И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.

Так ради чего платится такая цена? Есть ли какое-то преимущество у такого Code style?
  • Вопрос задан
  • 222 просмотра
Решения вопроса 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Минусы как бы очевидны:
нет, не очевидны, по крайней мере миллионам разрабов

1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.
Вам как разрабу должно быть в принципе фиолетово, какой из пакетов используется, если они соблюдают один интерфейс. Если не соблюдают, при том что называются одинаково, значит все пошло не так задолго до проблем с определением пакета...

2 Код становиться длиннее - там где было бы просто:
\Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
приходится писать:
use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);
Код становится длиннее в проектах где 2 контроллера и в них по 1 экшену. Там где Extension::load будет вызываться больше одного раза, очевидно экономия на эксплуатации клавиатуры заметно увеличивается. А в больших проектах создание объекта может (и будет) повторяться многократно.

4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
Если не обращать внимание на отсутствие пункта 3, то... нет, не могу не обращать внимание, вот же торопыга....
Во первых - данная портянка очень аккуратно прячется любой адекватной ИДЕ,
Во вторых - это правильно и логично, хранить все импорты в одном месте
В третьих - если ты пишешь неимпортированный класс в коде - ИДЕ обычно предлагает варианты внесения его в блок импорта, и все выглядит аккуратно.

И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.
Хрен не знает, а ИДЕ замечательно знает и даже подсвечивает серым цветом неиспользуемые.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Часть проблем высосана из пальца, как очень смешной п.2 - разница в одну точку с запятой, а уже "гораздо длиннее", карл. При том что если класс использовать в коде хотя бы дважды, то вот тут как раз действительно получится "гораздо длинее"

use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);
Extension::unload([ 'vendor.module.components.cabinet.personal' ]);
vs
\Framework\Main\UI\Extension\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
\Framework\Main\UI\Extension\Extension::unload([ 'vendor.module.components.cabinet.personal' ]);

и будешь постоянно спотыкаться в коде об эти палочки.

А часть решается не просто, а очень просто: вместо того, чтобы писать код в Блокноте Виндоус, надо в кои-то веки освоить работу с нормальной IDE. Которая
- автоматом скрывает блок use
- по ctrl+наведение курсора показывает полный путь, а по ctrl-click сразу переходит в определение метода
- подсвечивает неиспользуемые неймспейсы, и не проблема их удалить
Ответ написан
Sanes
@Sanes
Если это встречается в нескольких местах или таких записей много. Чтобы было читабельней.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
08 мая 2024, в 20:21
2000 руб./за проект
08 мая 2024, в 20:15
50000 руб./за проект
08 мая 2024, в 20:07
7000 руб./за проект