Соглашения об именах или структура каталогов

Я программист PHP, но то, что я хочу обсудить, находится под влиянием Java.

Прочитав несколько статей о венгерской нотации и соглашениях об именах для нескольких языков, я доказал, насколько ясны соглашения об именах Java для интерфейсов, и у меня есть один вопрос.

Учитывая случай с коллекциями объектов, где у нас есть абстрактный класс с именем AbstractCollection и конкретный класс с именем Lists, как мне назвать интерфейс для Списки?

Вопрос в том, что в соглашениях об именах Java нет ни префикса, ни суффикса для интерфейсов, таких как ListsInterface или InterfaceLists.

Списки ЯВЛЯЮТСЯ именем интерфейса, и, очевидно, по крайней мере в PHP два файла в одном каталоге не могут иметь одно и то же имя класса или интерфейса.

Я знаю, что не КАЖДОМУ классу нужен интерфейс, но что, если я решу перейти в команду программистов? Другие программисты могут использовать мои классы, но им не следует открывать файлы классов, чтобы посмотреть, какие общедоступные методы они предлагают.

Просто прочитав его интерфейс, все понятно.

Точка структуры каталогов возникла из-за возможности добавить подкаталог с тем же именем интерфейса и внутри него файл конкретного класса. Например.:

/  
/Collections  
/Collections/Lists.php <-- Interface  
/Colection/Lists/Lists.php <--- Concrete Class  

Что теперь?


person Bruno Augusto    schedule 27.10.2011    source источник


Ответы (2)


Вы не должны давать интерфейсу и классу одно и то же имя. Никогда. Ради ваших читателей.

Я думаю, что ваша конкретная проблема имеет мало общего с соглашением, но с конкретной проблемой именования Lists вообще не похоже на интерфейс. List делает. Но в этом случае реализующий класс будет иметь более конкретное имя, например List_DoublyLinked и List_SinglyLinked (или любой другой список, о котором вы говорите).

person NikiC    schedule 27.10.2011
comment
Я знаю это. Но я думаю, что было бы наоборот. Списки (во множественном числе) представляют интерфейс, потому что все, что его реализует, будет одним списком (в единственном числе). Особенно мне не нравятся эти ClassesWithVeryLongName: P - person Bruno Augusto; 28.10.2011
comment
@BrunoAugusto ClassesWithVeryLongNames — это хорошо. Они описательные. Если вы используете код с пространством имен, вы все равно можете ссылаться на них, используя более короткие имена в своем коде, определяя псевдонимы;) - person NikiC; 28.10.2011
comment
Дополнительное примечание для перекати-поля, катящегося мимо, как я - использование буквального имени List для идентификации любого определения не удастся из-за резервирования списка слов; скорее неудачный. - person Dan Lugg; 10.12.2011

Я думаю, вам следует проверить соглашения об именах PHP вместо Java.

http://framework.zend.com/manual/en/coding-standard.naming-conventions.html

Zend предлагает хороший вариант, учитывающий почти все случаи.

У Symfony есть еще один ( http://trac.symfony-project.org/wiki/HowToContributeToSymfony#CodingStandards ), у Pear есть еще один ( http://pear.php.net/manual/en/standards.php ).

В вашем случае, чтобы показать, что интерфейс является интерфейсом, Zend заставляет вас добавлять суффикс к вашим интерфейсам. Таким образом, ваша структура каталога должна быть такой:

Collections/
Collections/ListsInterface.php
Collections/Lists/ListAbstract.php
Collections/Lists/MyList.php

Я не знаю, отвечает ли этот пост на ваш вопрос, но я надеюсь, что он поможет.

person radalin    schedule 27.10.2011
comment
В последние дни я читал о нескольких соглашениях об именах, и Java был самым элегантным, который я мог найти. Я пытаюсь избегать таких префиксов (или суффиксов), но пока мне не везет. :( - person Bruno Augusto; 28.10.2011