#java #php #naming #convention
#java #php #именование #соглашение
Вопрос:
Я программист на PHP, но то, что я хочу обсудить, зависит от Java.
После прочтения нескольких статей о венгерских обозначениях и соглашениях об именовании нескольких языков, я доказал, насколько понятны соглашения об именовании Java для интерфейсов, у меня есть один вопрос.
Учитывая случай с коллекциями объектов, где у нас есть абстрактный класс с именем AbstractCollection и конкретный класс с именем Lists, как я должен назвать интерфейс для списков?
Вопрос в том, что в соглашениях об именовании Java нет ни префикса, ни суффикса для интерфейсов, таких как ListsInterface или InterfaceLists.
Списки — ЭТО имя интерфейса, и, очевидно, по крайней мере, в PHP, два файла в одном каталоге не могут иметь одно и то же имя класса или интерфейса.
Я знаю, что не КАЖДОМУ классу нужен интерфейс, но что, если я решу перейти в команду программистов? Другие программисты могут использовать мои классы, но они не должны открывать файлы классов, чтобы увидеть, какие общедоступные методы он предлагает.
Просто прочитав его интерфейс, все становится ясно.
Суть структуры каталогов заключалась в возможности добавления подкаталога с тем же именем интерфейса и, внутри него, файла конкретного класса. Например.:
/
/Collections
/Collections/Lists.php <-- Interface
/Colection/Lists/Lists.php <--- Concrete Class
Что теперь?
Ответ №1:
Вы не должны давать интерфейсу и классу одно и то же имя. Никогда. Ради ваших читателей.
Я думаю, что ваша конкретная проблема имеет мало общего с соглашением, но с конкретной проблемой именования Lists
это совсем не похоже на интерфейс. List
делает. Но в этом случае реализующий класс будет иметь более конкретное имя, например List_DoublyLinked
, and List_SinglyLinked
(или любой другой список, о котором вы говорите).
Комментарии:
1. Я это знаю. Но я думаю, что было бы наоборот. Списки (множественное число) представляют интерфейс, потому что все, что его реализует, будет одним списком (в единственном числе). Особенно мне не нравятся эти ClassesWithVeryLongName : P
2. @BrunoAugusto Классы с очень длинными именами — это хорошо. Они являются описательными. Если вы используете код с пространством имен, вы все равно можете ссылаться на них, используя более короткие имена в своем коде, определяя псевдонимы 😉
3. Примечание для перекати-поля, проходящих мимо, как я — использование буквального имени
List
для идентификации любого определения завершится неудачей из-за резервирования слова «список»; довольно неудачно.
Ответ №2:
Я думаю, вам следует проверить соглашения об именовании PHP вместо Java.
http://framework.zend.com/manual/en/coding-standard.naming-conventions.html
Zend предоставляет хороший вариант, почти учитывая все случаи.
У Symfony есть другой ( http://trac.symfony-project.org/wiki/HowToContributeToSymfony#CodingStandards ), у Груши есть еще один ( http://pear.php.net/manual/en/standards.php ) тоже.
В вашем случае, просто чтобы показать, что интерфейс является интерфейсом, Zend заставляет вас добавлять суффикс к вашим взаимодействиям. Итак, ваша структура каталога должна быть такой:
Collections/
Collections/ListsInterface.php
Collections/Lists/ListAbstract.php
Collections/Lists/MyList.php
Я не знаю, отвечает ли этот пост на ваш вопрос, но я надеюсь, что это поможет.
Комментарии:
1. В последние дни я прочитал о нескольких соглашениях об именах, и Java была самой элегантной, которую я смог найти. Я пытаюсь избегать таких префиксов (или суффиксов), но пока мне не повезло. 🙁