Autor Zpráva
Cooolio
Profil *
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);
která mi vrátí
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.
Cooolio
Profil *
Nikdo?
Alphard
Profil
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 *
Ono je to pravě složité... Děkuji za odpověď

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: