DB Singleton vs static class

anonimen

Super Moderator
В момента съм си направил един "статичен" клас който държи една static PDO инстанция и всичко останало са статични методи. В момента ми е страшно удобно, защото викам
PHP:
\DB::fetchQuery("заявка");

И директно получавам резултат, без да имам никакви проблеми с глобални променливи и разни такива.
Обаче ми се струва, че това не е по "стандартите". Фактически това е един singleton, но за да ми е по-лесно на мен, съм го направил по горния начин.
В противен случай ще трябва да правя или
PHP:
$db->fetchQuery(''); // $db кой знае от къде идва - глобална променлива, параметър на метод или дявол знае какво

или пък:
PHP:
\DB::getInstance()->fetchQuery('')
което пък е дълго за писане.

Хрумна ми и една извратения - глобална функция, която да връща инстанция на DB, но това не толкова ООП...
PHP:
function DB () {
   return \DB::getInstance();
}
DB()->fetchQuery('');

Вие кой вариант предпочитате и кой е най-ефикасния?
 
Защо не контейнер? :) В на даката темата http://web-tourist.net/forum/viewtopic.php?t=128145&start=24 gamena007 е дал пример с config :)
 
djman каза:
Защо не контейнер? :) В на даката темата http://web-tourist.net/forum/viewtopic.php?t=128145&start=24 gamena007 е дал пример с config :)
Ок разгледах Pimple и разбрах за какво иде реч, мерси! Изглежда контейнерите ще свършат работа.
Сред всичките daka's теми има и някои доста полезни постове, за съжаление трудно се намират! :D
 
dakata__92 каза:
Eххх тези контейнери бреее :D :D :D :?:
Някъде из последните 1000 поста писа, (давам конкретен пример по памет) че няма смисъл да създаваш DB инстанция, ако юзера не иска, с цел бързодействие.
Точно това е идеята на контейнерите (поне pimple така са направили) - казваш с какво може да работиш, но още нищо не се зарежда. Чак когато access-неш обекта от контейнера, той се зарежда веднъж и вече е готов за използване :?:
На мен ми се струва удобно, не мислиш ли, че и на теб ще ти свърши работа? :idea:
 
anonimen каза:
dakata__92 каза:
Eххх тези контейнери бреее :D :D :D :?:
Някъде из последните 1000 поста писа, (давам конкретен пример по памет) че няма смисъл да създаваш DB инстанция, ако юзера не иска, с цел бързодействие.
Точно това е идеята на контейнерите (поне pimple така са направили) - казваш с какво може да работиш, но още нищо не се зарежда. Чак когато access-неш обекта от контейнера, той се зарежда веднъж и вече е готов за използване :?:
На мен ми се струва удобно, не мислиш ли, че и на теб ще ти свърши работа? :idea:

Няма смисъл да го правя. Имам Главен клас към който се обръщам за основните неща, и реално контейнера ще ми е само посредник. Не ми е нужен поне за момента. Кернела държи инстанциии в своите променливи вътре тъй, че е и контейнер. :)
 
dakata__92 каза:
Няма смисъл да го правя. Имам Главен клас към който се обръщам за основните неща, и реално контейнера ще ми е само посредник. Не ми е нужен поне за момента. Кернела държи инстанциии в своите променливи вътре тъй, че е и контейнер. :)
Знаеш ли и аз си мислех нещо подобно. Но ако в главния клас са наблъскани всички неща, които са за "контейнерната" част, няма ли да стане трудно за поддръжка?
Не знам какво ти прави главния клас, но предполагам, че основната му цел не е да контейнерства, да върши някои по-основни неща. Вероятно класът ще олекне, ако изнесеш инстанциите в контейнер.
Само предполагам, ще ми е интересно да чуя отговора ти :?:
 
anonimen каза:
dakata__92 каза:
Няма смисъл да го правя. Имам Главен клас към който се обръщам за основните неща, и реално контейнера ще ми е само посредник. Не ми е нужен поне за момента. Кернела държи инстанциии в своите променливи вътре тъй, че е и контейнер. :)
Знаеш ли и аз си мислех нещо подобно. Но ако в главния клас са наблъскани всички неща, които са за "контейнерната" част, няма ли да стане трудно за поддръжка?
Не знам какво ти прави главния клас, но предполагам, че основната му цел не е да контейнерства, да върши някои по-основни неща. Вероятно класът ще олекне, ако изнесеш инстанциите в контейнер.
Само предполагам, ще ми е интересно да чуя отговора ти :?:
По принцип не съм мислил по темата за ядрото но все пак това е като да имам автобус с капацитет 50 човека, да са качени само 5 а багажа им да е на друг автобус. :D :D :D Поне за момента при мен е така. Правя два курса тост проблема ми е че контейнера ще ми е просто посредник със същите методи от ядрото. Защо ми е да го създавам или наследявам когато просто мога да се обърна към ядрото и от там да си взема инстанцията. За напред ако приложението го разширя и видя че такъв контролер ще ми е от полза то ще драсна един но до тогава ще си каже какво е положението. За момента не ми е нужен посредник. :)
 
Прочети за Dependency Injection(DI). Ако можеш си намери пример на PHP. Phalcon фреймуорк-а ползва DI, може да разгледаш документацията.
 

Back
Горе