Ano, použití globální proměnné není (minimálně) v tomto případě vůbec čisté, a to hlavně ze dvou důvodů: 1) Globální proměnná má (jak název napovídá) globální životnost, kdežto zde je potřeba "něco", co má stejnou životnost jako ten formulář, kterému je potřeba toto nastavení při jeho vytváření předat. Takto není nijak zajištěno ani vynuceno, že proměnná bude nastavena vždy při konstrukci formuláře a i kdyby byla, tak tento požadavek není v kódu nijak vidět. 2) Tato proměnná je pouze jediná, kdežto formulářů se obecně může najednou otevírat více. Nyní je funkčnost závislá na splnění požadavku, že od doby nastavení proměnné (před objForm.Show()) až do doby, kdy si formulář proměnnou "vyzvedne", se tato globální proměnná nesmí nikde změnit (tedy například se formulář mezitím nesmí otevřít podruhé). A opět to není jinak zajištěno, vynuceno, a ani to není v kódu vidět. Opět je potřeba "něco", co je svázáno s instancí formuláře. Obě tyto záležitosti vedou na neudržovatelný, nerozšiřitelný a nepřehledný kód se skrytými předpoklady a závislostmi. Jediné správné řešení takovýchto případů je již výše uvedené řešení se základní třídou nebo interface. Přitom si myslím, že je to téměř úplný základ OOP, a že je to není nijak obtížné.
|