Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Využij akce až 80% zdarma při nákupu e-learningu. Více informací .
C# week
Avatar
Martin Konečný (pavelco1998):25.12.2013 10:14

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
25.12.2013 10:14
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Kit
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Kit:25.12.2013 10:25

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
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:25.12.2013 10:46

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:25.12.2013 12:29

Ú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
25.12.2013 12:29
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Konečný (pavelco1998):25.12.2013 15:46

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka:26.12.2013 9:33

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
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Nahoru Odpovědět
26.12.2013 12:03
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
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.