Конвенции за именуване или структура на директорията

Аз съм 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 ви принуждава да поставите суфикс на вашите интерфейси. Така че вашата dir структура трябва да бъде като:

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