Подскажите как правильно сделать.
Пытаюсь сделать простейшую cms по mvc паттерну.
Хочу создать объект базы данных всего один раз. Класс Db - это синглтон.
Можно ли так сделать?
$db = Db::getInstance();
Объект Db создается всего один раз, затем в контроллерах используется его статические методы, например:
$data= Db::getOne(1);
нужной переменной сразу присваиваются нужные данные через статический метод, которые затем выводятся в шаблоне.
Вопрос в том, где создать объект класса Db? Во фронт контроллере, в самом главном контроллере, от которого будут наследоваться остальные или еще где-то?
Sergey Frolov: да просто расстраиваюсь... MVC людям давать надо через пол-годика годик, дав до этого базовое понятие о смысле разделения ответственности, связанности и т.д. Без этого MVC так и будет сводиться к тому что бы сделать модели как точки доступа к табличкам, и представление в виде шаблонизатора...
Сергей Протько: да сложилось так что во многих видео-уроках и мануалах по созданию cms(этот нездоровый интерес появляется наверно у каждого второго кто хоть немного освоил php), использование mvc обосновывается тем, что этот подход облегчает поддержку вашего кода другими программистами(какая нахрен поддержка другими программистами, когда человек все пишет по мануалу)
Sergey Frolov: не, то что нужно учить вещам которые "облегчают поддержку" - это правильно. Особенно новичков для которых код который они писали неделю назад это уже чужой код.
Проблема как раз в том что люди потом услышав аббривиатуру не задаются вопросом а "почему так?" Для них вся соль в том что бы эти три буквы были, а не в том как они друг к другу относятся.
Alex Void: спасибо. но это самый что ни есть стандартный вариант использования синглтона.
В getInstance ленивая инициализация объекта и его возврат, а дальше уже пользуемся методами объекта. И не нужно думать, где вам его инициализировать, это произойдет при первом использовании.
правильно использовать инверсию зависимостей и передать готовый объект класса соединения в нужную модель. Синглтон это антипаттерн, зачем он вообще тут?
> Вопрос в том, где создать объект класса Db?
Реализация подключения к базе данных никакого отношения к контролером не имеет.
Класс Db - это системный класс вашего фреймворка.
Вопрос где размещать его, это ваши предпочтения, на мой взгляд было бы логично разместить его, например, в папке systems. Все зависит от того как вы спроектировали логическую структура вашего фреймворка.