Пожалуйста, подскажите - как лучше передавать объкт класса и нужен ли синглтон

Spear

почемучка
Пожалуйста, подскажите - как лучше передавать объкт класса и нужен ли синглтон

Здравствуйте,
поиск использовал - нашло достаточно топиков. Но на мой ответ вопроса я так и не получил.

Дело в том что я, по-моему, стал использовать Registry не в тех целях.

Вот мой класс регистри - http://phpclub.ru/paste/2070

Как работает движок (схематически):
в index.php подключаются файлы нужных классов, и классы, после создания их объекта, записываются в регистри.

Что-то такое:
PHP:
$coreclass = new core_class();
Registry::RegisterClass('coreclass', $coreclass);

Registry::RegisterClass('usersCore', new class_user());

$View = new display();
Registry::RegisterClass('View', $View);
Потом, в контроллерах уже самог оприложения, например, делается примерно такое:

PHP:
class Friends_Controller
{
    private $coreclass;
    private $userCore; // это объект класса с общими методами при работе с пользователями
    private $user; // а это уже объект класса зарегистрированного пользователя
    
    public function __construct()
    {
        $this->coreclass->Registry::RetrieveClass('coreclass');
        $this->user->Registry::RetrieveClass('user');
        
    /** тут же - выкидываем на страницу ошибки если $this->user не авторизирован*/
    }

    public function run()
    {
        // Тут получаем то, что запросил пользователь, допустим это список друзей
        $this->friends_list();
    }
    
    /**
     *Список друзей (текущего авторизированного пользователя или другого пользователя, если есть параметр $_REQUEST['id']
     */
    private function friends_list()
    {
        //.......
        $this->userCore = Registry::RetrieveClass('userCore');
        
        $uid = $_REQUEST['id'] ? intval($_REQUEST['id']) : $this->user->info('id');
        
        if ($uid !== $this->user->info('id')) $this->userCore->load_user($uid);

        $friendsList = $this->userCore->build_friends_list($uid);

        //.....
        return $friendsList;
    }

}
В чем я сомневаюсь:
1. Правильно ли я использую регистри? она мне, по-сути, заменяет старый "global $blabla". В ней хранится примерно 7-10 объектов классов.

2. Подскажите, пожалуйста: для класса userCore создается объект. Но это только потому что у так сделал я а, как видите, нуждаюсь в помощи :) В этом классе есть private свойство users_cache, в которое сохраняется результат метода load_user этого де класса (чтобы не вытаскивать из базы несколкьо раз данные одного и того же юзера, если вдруг где-то в приложении это понадобится). ЗНачит, нужно класс userCore делать синглтоном?

На всякий случай - userCore это класс с общими методами при рбаоте с пользователями (вытащить из бд, выдать список друзей).

Буду очень благодарен за помощь!
 

HraKK

Мудак
Команда форума
1. Правильно ли я использую регистри? она мне, по-сути, заменяет старый "global $blabla". В ней хранится примерно 7-10 объектов классов.
А регистри это и есть "красивая обвертка над глобалс" по сути.

ЗНачит, нужно класс userCore делать синглтоном?
Не нужно - так скоро вы все классы сделаете синглетонами.
 

Spear

почемучка
А вобще структура правильная?
просто я вижу тонны сообщений типа как лучше передавать меоды класса - через синглтон или фактори или через __construct()... а у меня такой проблемы нет т.к. сам использую регистри.. это что, волшебная таблетка, о которой никто незнает? или я чего-то непонимаю?
 

korchasa

LIMB infected
http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code

ЗЫ: Туда уже можно рекламу ставить :D
 

rotoZOOM

ACM maniac
Spear У регистри есть как плюся так и минусы.
Плюсы:
- все необходимые сервисы хранятся в одном месте, и зная
только их строковый идентификатор вы можете получить
сервис;
- не надо передавать кучу параметров в конструкторы объектов, причем иногда даже те, которые не нужны конкретно этому классу, а нужны какому то другому классу, который находится ниже в иерархии (то есть потомку);
- удобно подменять сервисы на момент тестирования и т.д., не меняя при этом пользовательские классы.
Минусы:
- нарушение защиты: любой объедк может чо угодно делать с любыми зарегистрированными сервисами, даже теми, которые ему и не нужны (удалять, подменять и т.д.).
 
Сверху