IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
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
Tvůrce
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Hartinger: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
New kid back on the block with a R.I.P
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 Hartinger: 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 Hartinger
Vlastník
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Hartinger: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
New kid back on the block with a R.I.P
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.