Diskuze: Jak řešíte spojení s DB v OOP?

PHP PHP Jak řešíte spojení s DB v OOP? American English version English version

Avatar
Martin Konečný (pavelco1998):

Ahoj,

jak řešíte v OOP spojení s databází, respektive jak předáváte instanci PDO?
Nenapadlo mě lepší řešení, než si udělat rozšíření třídy PDO o singleton. Pak mám rodičovskou třídu, ve které je protected vlastnost $db. Do té v konstruktoru uložím instanci mého rozšíření PDO.

Nevím, jak dobré řešení to je, ale nemusím kvůli tomu tu instanci předávat jako parametr všem novým objektům a spojení s databází budu mít jen jedno.

Např. v Nette je to řešeno pomocí DI, ale ani nevím, jestli bych ho dokázal napsat, a hlavně bych ho jinak ani moc nevyužil.

Asi se to tu už řešilo, ale nemohu to nikde najít.

 
Odpovědět  -2 25.12.2013 10:14
Avatar
Kit
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Kit:

V Nette není DI, ale DI kontejner. Pravé DI je, když se na Singleton vykašleš a konstruktoru každého objektu, který databázi potřebuje, předáš $db jako parametr. V MVC stejně do DB smí jen model, takže je to jeden parametr navíc.

Nahoru Odpovědět  +3 25.12.2013 10:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Kit:

To by mě zajímalo, za co dostal Martin Konečný (pavelco1998) ty mínusky. Je to regulérní dotaz. Myslí si snad někdo, že by použití Nette bylo vhodnější?

Nahoru Odpovědět 25.12.2013 10:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka:

Úplně nejjednodušší máš udělat si statickou třídu, co má v privátním atributu instanci PDO a na tu deleguješ statické metody. Pokud jsi objektový nácek, můžeš si udělat kontejner se službami a ten předávat v konstruktoru modelů.

Nahoru Odpovědět  -1 25.12.2013 12:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Martin Konečný (pavelco1998):

Někde jsem slyšel, že statika není v tomto případě OK, proto jsem se chtěl zeptat, jak to řeší ostatní.

David Čápka: Zatím to mám podobně, jen s tím rozdílem, že metody nemám statické a instanci získám pomocí metody getInstance().

Asi to opět vyvolá nějaký static vs non-static souboj, ale chtěl bych znát řešení od zkušenějších vývojářů.

 
Nahoru Odpovědět 25.12.2013 15:46
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka:

Singleton tam nedávej, to je asi nejhorší varianta :) Statika se v praxi často pro systémové, charakterem pomocné třídy používá. Mám info od několika lidí, že ve firmách mají přesně takhle udělané DB wrappery, devbook funguje také takhle.

Jejím negativem je hlavně že nemůžeš najednou pracovat s více databázemi, ale to se stejně většinou nedělá. testovací DB si uvnitř samozřejmě můžeš přepnout, to není problém. Každopádně řeči jak to je špatně jsou hlavně od teoretiků, běží takhle spousta aplikací.

Docela jsem si teď ale zvykl na předávání toho kontejneru, kde máš vytvořené instance služeb co používáš, PHP dědí konstruktory, takže to tam člověk nemusí pořád opisovat.

Nahoru Odpovědět 26.12.2013 9:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.