ПредишенСледващото

  • PHP
  • софтуер
  • PLO
  • Архитектура приложение

Добър ден. При проектирането на система изправени пред въпроса за именуване на класовете в сложни случаи. Проблемът е, че в йерархията на класовете индивидуален елемент не винаги е само една "майка" (не само от гледна точка на наследството ( "цвете произхожда от растения"), но също така и по-общо, "цветето има листа"). Всъщност, въпросът е - от това, което правило да се обадя тези елементи?


Няколко примера за класове, чиито имена са проблем (съжалявам за глупавите примери):

- Лили, наследен от цвете (B, наследява от А)

- венчелистче, която може да бъде само крем (С, който се използва само в В)

- Списък, който може да бъде и крем, и обикновено цвете (D, който се използва в В и А)

- тичинка, който може да бъде и крем, и мак, но по избор е цветът на всички (E, който се използва, и F (който от своя страна наследени от А) и Б, но не се използва )

И краен случай: има един апартамент, който има някаква красива боклук. Лили, по принцип може да се използва като красива боклук. Как да даде име на адаптера "Красивата Лилия като боклук", така че да не се изгубите сред всички класове (защото теоретично тя принадлежи на "плосък" група, но зависи и от "цветя" на групата)? Абстрактно - имат G, който използва Н; как да се обадя аз, който да се използва polzvolyaet Б като H?


Хич възникнала поради строго йерархична файлова система и навици наричат ​​класове а-ла папка (т.е. Fuston_Http_Response_Cookie_Marked). Този навик просто не е отговорът на въпроса "какво да се обадите на интерфейса, което ще позволи Testing_Database_Cache_Cookies използват извън клас Fuston_Http_Response_Cookie като свои собствени Testing_Database_Cache_Cookies_Cookie?».

Наследяването е само най-много, нито е прост, например, отразява абстрактен отговор Response, StaticResponse - отговор, тялото на която се определя като низ и DynamicResponse - отговор, тялото на който се генерира в момента на изпращане на отговора. Всичко останало не се наследява, но използва само (например, клас Response използва Cookie обект клас за показване на бисквитки).

Интересува се от това именуване, тъй като без никакви проблеми. Мога да дам конкретен пример, има EduPortal_Addon_Testing тест модул с един куп класове в и имат рейтинг модул EduPortal_Application_Rating също, странно, с един куп класове вътре. Искам да добавя използването на функцията, тъй като данните от класацията на изпитване. Имам абстрактно в класацията на данните за получатели EduPortal_Application_Rating_Getter_Abstract и получателя директно от EduPortal_Application_Rating_Getter_Wui клиент. Обикновено целта създайте получател за модула за изпитване, която се подава към обекта на EduPortal_Addon_Testing пакет (независимо дали е основната EduPortal_Addon_Testing_Core повечето, които ще имат API за извличане на данни или специален отделен клас-API за една и съща функция). Какво трябва да наричаме този получател (PHP език)? EduPortal_Application_Rating_Getter_EduPortal_Addon_Testing? EduPortal_Application_Rating_Getter_EduPortalAddonTesting? EduPortal_Application_Rating_Getter_Testing? Последното изглежда перфектно, но какво ще стане ако има MathSite_Testing? Тестване зависи от това, последната дестинация?

EduPortal_Application_Rating_Getter_Abstract - странно име. Защо добавяне Abstract в края, ако класът е вече в подписването на абстракция? Аз не знам как се прави в PHP, но бих нарекъл EduPortal_Application_Rating_BaseGetter.

На получател на изпитването - той не принадлежи към най-логическа единица тестване? Ако е така - тогава защо не го сложите там и да не се каже: EduPortal_Addon_Testing_RatingGetter?

Странното име се нарича Автоматично зареждане на класове и класове желаят да натъпче един единствен "поле" в същата директория. Във вашия случай, и на стандартите на Zend абстрактен клас би било по-добре да се обадите или _Getter или _Getter_Abstract, защото Методът за получаване на BaseGetter.php на файлове и папки по един бърз поглед лош съвпадат един с друг.

Точно така:
1. Име на класа няма да се включат в реда - е от решаващо значение за отпечатан изходния код, и четливост убива
2. Очаква се на въпроса "SHOZANAH?", За този дълъг низ от нищо не казва къде свършва описанието на определен клас (кариерист за рейтинги) и да започне с описание на параметрите (където tyrit данни)
3. Startup класове куца - обичайните принципа на "акцентира върху наклонена черта" не е приложима, тъй като на абсурдността си в този случай, и умен, с това не искам да

Е, в моята версия, просто защото от ал.2, на същото място има две долни черти - когато краищата Getter'a пълно име и името на започва свързана клас.
И като цяло, аз все още мисля, че един нормален име ще бъде:
EduPortal_Application_Rating_AddonTestingGetter, а дори и по-добри juzat именни пространства.
Ако имате технически проблеми, и така не работят - ще трябва да страдат с неясни дълги опашки ... е, има причина за преодоляване на техническите предизвикателства;)

1. В никакъв случай името на класа Roditel_dite_ т.н.
2. Използвайте пространства от имена е да се отървете от грозни имена
3. Погледнете именуване на класовете Зенден (празник), има имената на логиката говори за себе си
Ако се запазят тези три точки, никога не се загуби =) и имена ще бъдат красиви и структурна логика винаги ще бъде ясно.

1. Това е причината за този проблем (^_^) Има Response, има DynamicResponse, наследена от отговора, а има ResponseCookie, който се използва от Response. Response_Dynamic и Response_Cookie - IMHO, глупав, защото отличава потомък на помощника на класа не може да бъде без код, но и други разделители, с изключение на долна черта, а не (-_-).
2. Не пространства от имена, въпреки че би било желателно (-_-) (см. Предишни отговор).
3. Сега гледах преразгледа по-отблизо.

В Zend не адаптери между компоненти от различни системи, като например рамката на модул, на друг модул на сайта и свой собствен дизайн агрегата, а мен те все още са необходими (докато не излезе с по-добро решение) - виж първия отговор, който го е дал конкретен пример ..

/ библиотека
/ Отговор /
/AbstractResponse.php
/Dinamic.php
/Cookie.php
Занятията ще бъдат призовани за:
Responce_Dinamyc и Responce_Cookie
Щях да направя така.

А какво да кажем цветя и листенца ти беше прав
/ Library /
/ Flower
/Petal.php
/Flower.php
И класове, съответно:
Цветя и Flower_Petal (логика тук не е родител - наследник, и отношението към podobektu на обекта)

Ето това е проблемът: Response_Dynamic наследено от отговор и не Response_Cookie, но един бегъл поглед, и без него не можеш да разбереш кода. Аз го накара подобен въпрос.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!