Допустимо ли в PSR-4 использовать два пространства имен верхнего уровня, и если да, то как их назвать?

Доброго дня.
В спецификации, в основном, упирают на либы сторонних поставщиков (т.е. на неймспейс Vendor), однако очевидно, что нативный код проекта должен иметь другой неймспейс. Дословно это так:

The fully qualified class name MUST have a top-level namespace name, also known as a “vendor namespace”.

При этом, должна быть как минимум одна директория, соответствующая этому самому "vendor namespace", что написано ниже.

A contiguous series of one or more leading namespace and sub-namespace names, not including the leading namespace separator, in the fully qualified class name (a “namespace prefix”) corresponds to at least one “base directory”.

Я вижу здесь удар по семантике. Допустим, у меня есть папка includes или libs, и папка vendor (отдельно или внутри libs, не суть важно). Соответственно, потребуется изобретать неймспейс для написанного мной кода, при этом, если определить его как "Classes" или "Libs", я буду ограничен только классами и библиотеками, ведь это следует из названия. Неймспейс "Includes" и прочие подобные бессмысленны, т.к. ничего не описывают. Добавить вдобавок к "Classes" еще такие неймспейсы, как "Interfaces" и "Traits", и соответствующие директории? Не слишком ли это избыточно, и не приведет ли к раскидыванию компонент на несколько не связанных друг с другом каталогов?

Как делают в реальных, серьезных, поддерживаемых проектах?
Заранее спасибо.
  • Вопрос задан
  • 288 просмотров
Решения вопроса 2
@miksir
IT
Во-первых, у вас удар по семантике уже нанесен смертельный когда вы начали делать неймспейсы Classes, Libs и Includes. Семантика - это назначение класса, но никак не его тип. Т.е. Controlles, Models, Services, Events и т.п. Но это лирика.

По сути вопроса - первая часть в неймспейсе должно быть имя вендора. Название компании, где вы работаете, название компании, для которой вы делаете проект или просто ваше имя. Дальше уже по усмотрению, хотя я бы советовал вторую часть называть по названию проекта. А дальше воротите что хотите.

Что до psr-4, он позволяет любую левую часть неймспейса (любого размера) мапить на любую директорию. Т.е. вы може свой \Heian\MyCoolProject\ отмапить в ./src/ и тогда \Heian\MyCoolProject\Libs будет ./src/Libs. Можете \Heian\MyCoolProject\Libs\ отмапить в ./mylib/ и т.д. Причем, таких мапов может быть сколько угодно, хоть все варианты неймпсейсов пропишите в мапинг.

Хотя, конечно, обычно делают что-то вроде \MyVendor\Project\ в ./src/Project/ или просто \MyVendor\ в ./src/
Ответ написан
Tantacula
@Tantacula
Ларавельщик, витающий в небесах.
поместите свои либы в папку приложения, дайте ему неймспейс типа App и обращайтесь дальше к своим папкам App\Classes App\Includes. Если там сторонний код, добавьте в композере в раздел autoload эти папки с psr-0 именами, либо через classmap (почитайте доки композера на этот счет, там есть примеры), раз они под psr-4 не подходят (хотя скорее достаточно просто указать в autoload в psr-4 название неймспейса и соответствующее ему название папки, где нужно искать файлы с его классами).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ЭР-Телеком Пермь
от 80 000 ₽
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
DANYCOM Краснодар
от 50 000 до 100 000 ₽
06 апр. 2020, в 14:44
5000 руб./за проект
06 апр. 2020, в 14:14
10000 руб./за проект
06 апр. 2020, в 14:11
500 руб./в час