![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
owlet |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.2.2007 Репутация: нет Всего: нет |
Пишу очередной "велосипед" - движок сайта с модулями...
Хочу разграничить права доступа к экземплярам классов ядра для разработчиков разных типов модулей. Так как в PHP нет аналога friends в C++, то пока что делаю таким образом: создаю абстрактный класс - прототип будущего класса B, который будет как бы friends классу A. В конструкторе класса В устанавливаю ссылку на экземпляр класса А. Так как экземпляр класса А является privat свойством класса ядра, то доступ к нему получают только те модули, в конструкторе которых была осуществлена привязка через ссылку (т.е. экземпляры класса В). Конструктор сласса В объявляю final дабы не поломалось все случайно. Наверняка кто-то сталкивался с подобной проблеммой, хотелось бы узнать, какие еще есть способы решения, критика моего подхода тоже интересует. Это сообщение отредактировал(а) owlet - 5.3.2007, 14:10 |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Скажи не то, что ты делаешь, а то, что тебе надо.
|
|||
|
||||
owlet |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.2.2007 Репутация: нет Всего: нет |
Что мне надо:
Нужно написать CMF со стандартными интерфейсами модулей. Так как опыта в программировании достаточного нет, хотелось бы написать так, чтобы ядро можно было бы переписывать, не нарушая нормальной работы модулей, в каких-то пределах, разумеется. На данный момент остановился на том, что агрегирую все объекты ядра в контроллере, который в свою очередь раздает ссылки на необходимые объекты непосредственно разным типам модулей. Используется php5, ООП. А вообще вопрос не о том, как сделать что-то конкретное, а о том, какими способами можно заменить friends С++ - мне этот подход кажется довольно удобной вещью, и я бы охотно его использовал. |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Кстати нельзя вернуть ссылку на агрегируемый объект впринципе ) Т.к. это уже композицией будет называться, а не агрегацией. А модули делай через AbstractFactory, при этом у класса-предка можно уже реализовать типовые методы, которые будешть использовать. |
|||
|
||||
owlet |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.2.2007 Репутация: нет Всего: нет |
Да, пожалуй, проще!
Ясно, спасибо.
Да, так и делаю. Спасибо за ответ, понятно теперь, что зря я паттерны не знаю ![]() Это сообщение отредактировал(а) owlet - 7.3.2007, 16:20 |
||||||
|
|||||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |