2019. március 22., péntek

Gyorskeresés

Global state

Írta: | Kulcsszavak: prog . global state . singleton

[ ÚJ BEJEGYZÉS ]

public function __construct() {
$this->HttpContext = System\Web\HttpContext::Instance();
$this->FormState = System\Web\Mvc\FormState::Instance();
}

A Singleton (és bármi hozzá hasonló) nagyon szép meg jó, néha tényleg hasznos, de a fenti példa rossz, egy gyökér volt, aki csinálta (én). Mi ezzel a gond? Bármilyen globális állapot használata magában hordozza azt, hogy valami egyszer működik, egyszer nem, mert nem látunk a rendszer mélyébe, ahol a fekete mágia történik. Ha kapunk egy kódhalmazt, ami pl. használni vagy tesztelni kellene, és tele van ilyen globális megoldásokkal, akkor azon fogjuk kapni magunkat:

- fogalmunk sincs, hogyan kell használni
- nem tudunk rá tesztet írni az első pont miatt, vagy azért, mert egyszerűen nem tudunk teszteseteket beletolni a rendszerbe

Érdemes elgondolkodni azon is, ha pl. egy C# kódban valaki DateTime.Now-ot használ, az vajon globális állapotnak minősül-e, avagy sem? (Szerintem mindenképp annak.)

Singleton és más sötét erők használata helyett igyekezzen mindenki elmélyedni az igazi OO szépségeiben, próbálja meg felépíteni az alkalmazása objektumfáját úgy, hogy egyértelmű legyen, mi mitől és hogyan függ, melyik elemnek mire van szüksége (dependency injection).

Már egy ideje azon vagyok, hogy kiöljem a kódomból ezeket az elemeket amennyire csak lehet. Sokszor nehéznek tűnik, de, amikor kész van egy rész, bárki láthatja, hogy igen, ennek valóban így kell működnie, tiszta és világos minden.

public function __construct(HttpContext $httpContext, FormState $formState) {
$this->HttpContext = $httpContext;
$this->FormState = $formState;
}

Hozzászólások

(#1) Athlon64+


Athlon64+
(őstag)

[ értesítő ]

További hozzászólások megtekintése...
Copyright © 2000-2019 PROHARDVER Informatikai Kft.