Сложные PHP-приложения имеют сотни сервисов. Каждый сервис связан с идентификатором сервиса, обычно это строка, выбранная разработчиком. Например, repository.users.sqlite
является экземпляром класса UserRepository
, настроенным для работы с пользователями таблицей, по умолчанию sqlite экземпляром.
Какое соглашение о присвоении имен для такой строки?
Я хочу избежать ненужного набора текста, размышлений, дебатов CR, копирования / вставки имени службы и поиска в базе кода, чтобы выяснить, что скрывается за идентификатором.
Я вижу некоторые варианты, но ни один не идеален:
- используйте строку (что-то вроде
repository.users.sqlite
) и копируйте / вставляйте ее везде
$di['users.service'] = new UsersService($di['repository.users.sqlite']);
- создайте константу для хранения идентификатора службы где-нибудь в классе поставщика услуг и используйте ее:
const USERS_REPOSITORY_SQLLITE = 'repository.users.sqlite';
const USERS_SERVICE = 'users.service';
$di[self::USERS_SERVICE] = new UsersService($di[self::USERS_REPOSITORY_SQLITE]);
- использовать встроенные константы класса PHP (
UserRepository::class
) в качестве подхода к присвоению имен для идентификаторов сервисов. Таким образом, нет необходимости создавать постоянную или запоминать что-то. Также в этом случае работает завершение кода в среде IDE.
$di[UsersService::class] = new UsersService($di[UsersRepository::class]); // default sqlite implementation is used here
Какое соглашение об именах для идентификаторов службы DI вы используете и почему?