Я в настоящее время следую за PSR-2 и PSR-4. Я сталкиваюсь с небольшой дилеммой, когда пытаюсь назвать несколько классов. Вот пример.
У меня есть базовый клиент REST, \Vendor\RestClient\AbstractClient
, У меня есть две реализации этого абстрактного клиента:
\Vendor\GoogleClient\GoogleClient
\Vendor\GithubClient\GithubClient
Является ли наименование клиентских классов избыточным, поскольку пространство имен уже указывает домен? Должен ли я вместо этого назвать мои классы:
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
Это будет означать, что клиентский код всегда будет использовать что-то вроде:
use Vendor\GoogleClient\Client;
$client = new Client();
Это немного менее многословно, чем:
use Vendor\GoogleClient\GoogleClient;
$client = new GoogleClient();
Но первый вариант позволяет нам легко менять реализации, только изменяя оператор использования.
PSR4 указывает, что Interfaces
а также AbstractClasses
должен быть дополнен Interface
и с префиксом Abstract
соответственно, но ничего не говорит о доменных префиксах / суффиксах. Есть мнения / предложения?
Это полностью зависит от вас, так как в PSR для этого нет соглашений об именах. Но что вы должны иметь в виду для вашего решения, если вы решите для
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
и вы хотели бы использовать оба из них одновременно (с use
)
use Vendor\GoogleClient\Client;
use Vendor\GithubClient\Client;
$client = new Client();
вы столкнетесь с ошибкой, потому что Client
не уникален
Конечно, вы все равно можете использовать их сразу, как
use Vendor\GoogleClient\Client as GoogleClient;
use Vendor\GithubClient\Client as GithubClient;
$client1 = new GoogleClient();
$client2 = new GithubClient();
или без use
лайк
$client1 = new Vendor\GoogleClient\Client();
$client2 = new Vendor\GithubClient\Client();
Но если вы планируете, что программист может легко переключить клиента в своем коде всего одной строкой, изменив
use Vendor\GoogleClient\Client;
$client = new Client();
в
use Vendor\GithubClient\Client;
$client = new Client();
это было бы намного проще, чем менять все new GoogleClient()
заявления к new GithubClient()
тоже.
Заключение
Вы видите, что это решение во многом зависит от ваших собственных потребностей и симпатий. Решите сами, какой из них лучше для вас.
Как примечание, также рассмотрите возможность рефакторинга, используя:
\Vendor\Client\Google
\Vendor\Client\GitHub
Логика такова: от менее конкретной к самой.