Zrovna podobný problém se zapouzdřením řeším (setry, getry a podobně) už hodně let.
Podle mne je pro výsledek rozhodující jaký koncept ošetření chybových stavů je implementován celkově v systému.
Jestli pozdní nebo včasný. Teď nemluvím o testovaní uživatelem zadaných hodnot, ale řešení výjímek/výjmečných stavů.
Včasný koncept je založen na principu,že nekorektní stavy neumožní objekt ani vytvořit.
Pozdní koncept je založen na principu, že nekorektní stavy jsou ošetřovány až v momentě potřeby, ale objekt jde
vytvořit. A metody, které s uvedenými stavy nepracují mohou normálně fungovat.
Uvedu na příkladu:
řekněme, že máme třídu psa. A chceme vytvořit jednu instanci na základě dat s db, ale po načtení zjistíme,
že je požadováno vytvořit psa se 3 nohama....(neřeším jak tato věc v db vznikla).
A) Včasné řešení neumožní psa ani vytvořit. Vyjímku vyhodí už constructor.
B) Pozdní řešení psa vytvoří, ale vyjímky vyhodí až metoda běhej. Metoda podej pac bude normálně fungovat pro zdravé nohy.
OOP teorie říkají, že A) je správně..objekt lze založit jen pokud jsou stavy vnitřně konzistentní.
Bohužel praxe ukazuje, že B) je významně lepší, neboť nám dává možnost na nekorektní stavy reagovat a
chybný stav opravit (psa zoperovat, aby měl 4 nohy a mohl pak běhat).
Pro A) musím explicitně řešit jak se vypořádat s nekonzistencí, ale to je někdy problém, nekonzistnce je vně systému.
Pro B mám tedy volnější podmínky na konzistenci vnitřních stavů a getry a setry, zde často postrádají úplně smysl.
neboť konzistenci hodnot nekontrolují....
PeVa