Autor | Zpráva | ||
---|---|---|---|
Cooolio Profil * |
#1 · Zasláno: 3. 3. 2016, 08:46:27
Ahoj,
máme v práci cms, které je celé blbě řešené (výměna není reálná), je víceméně procedurálně/staticky řešeno až na pár částí pro které můj předchůdce napsal nějaké třídy. Problém který řeším je výměna původní staticky řešené databázové třídy (Database::query(...) atd.) ideálně zpětně kompatibilní, že bych upravil její "střeva" v Doktrine jsem koukal že založím připojení $connectionParams = array( 'dbname' => 'mydb', 'user' => 'user', 'password' => 'secret', 'host' => 'localhost', 'driver' => 'pdo_mysql', ); $conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config); Doctrine\DBAL\Connection Napadlo mě několik řešení ale nejsem si jistý jejich čistotou (vzhledem k okolostem) 1. založit nějakou static/singleton registry třídu do které bych uložil onen $conn a následně volal instanci Registry::getConnection() 2. uložit $conn do statické veřejné proměnné v statickém jádře (je jich tam víc) a volal Core::$connection->query(...) 3. udělat DB třídu 3.1. která by v konstruktoru nastavila pripojení a drzěla ho v sobě staticky (to se mi moc nelíbí) 3.2. která si v konstruktoru vytáhne instanci z bodu 1. nebo 2. 4. pomocná funkce function DB() { //$conn ziskat přes DriverManager nebo body 1-3 return $conn; } Líbilo by se mi volat přímo Doctrine ale nechci všude vyplňovat udaje k DB. Vím, že ty řešení jsou všechny na pytel, proto se obracím na Vás. |
||
Časová prodleva: 17 dní
|
|||
Cooolio Profil * |
#2 · Zasláno: 20. 3. 2016, 08:43:36
Nikdo?
|
||
Alphard Profil |
#3 · Zasláno: 20. 3. 2016, 10:27:54
Podle mě k tomu není moc co říct. Když nechcete referenci na připojení předávat (vzory service locator nebo dependency injection), musíte ji vytáhnout z něčeho statického, jiná možnost tady není (globální proměnná je podle mě ještě horší). A navržená řešení jsou docela srovnatelná, bez znalostí aplikace těžko říct, co je lepší.
Jestli je vašim cílem se statických věcí zbavit, navrhuji umístit připojení k databázi na optimální místo a dočasně ho v daném místě zároveň uložit i do něčeho statického. Takhle se k tomu dostanete z celé aplikace, ale v nových a refaktorovaných částech si budete potřebnou referenci postupně předávat, a časem se třeba ta statická proměnná bude moci smazat. |
||
Cooolio Profil * |
#4 · Zasláno: 20. 3. 2016, 11:57:16
Ono je to pravě složité... Děkuji za odpověď
|
||
Časová prodleva: 9 let
|
0