2015-12-18 4 views
1

В настоящее время я следую за PSR-2 и PSR-4. Я сталкиваюсь с небольшой дилеммой при попытке назвать несколько классов. Вот пример.Соглашение об именах классов имен пространства имен PHP

У меня есть базовый клиент REST, \Vendor\RestClient\AbstractClient. У меня есть две реализации этого абстрактного клиента:

  • \Vendor\GoogleClient\GoogleClient
  • \Vendor\GithubClient\GithubClient

Is именование классов клиента излишним, поскольку пространство имен уже указывает домен? Должен ли я вместо того, чтобы назвать свои классы:

  • \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 соответственно, но это ничего не говорит о конкретных доменных префиксов/суффиксов. Любые мнения/предложения?

+1

Если PSR ничего не говорит об этом, это, вероятно, оставляет его в индивидуальном стиле. – Barmar

ответ

6

Это полностью зависит от вас, поскольку для этого в 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() тоже.

Заключение
Вы видите, что это решение во многом зависит от ваших собственных потребностей и пристрастий. Решите сами, какой из них лучше для вас.

+0

Я лично предпочитаю более короткую форму. Это чище и заставляет разработчиков уделять больше внимания. – musicliftsme

0

В записке, а также рассмотреть реорганизовать с помощью:

  • \Vendor\Client\Google
  • \Vendor\Client\GitHub

Логика: от менее специфичного к самому одному.

Смежные вопросы