Místo setteru dělám controller, místo getteru viewer.
Tak z toho moc moudrý nejsem. Mohl by jsi to prosím trochu rozvést? S konceptem controlleru a view (architektura MVC) seznámen jsem, ale v kontextu jedné třídy mi to nic neříká.
Jak už jsem psal, do vnitřních proměnných z vnějšku nelezu. Bylo by to proti koncepci OOP. Zbývají veřejné (resp. protected) metody. Podle mne je velkou chybou, pokud tato metoda je jednořádková a vrací pouze jeden údaj. Vždycky totiž ten údaj chci s něčím zkompletovat nebo ho použít k nějakému rozhodování. A tyto operace vložím do metody toho objektu. Metoda mi pak z objektu nevrací elementární údaj, ale zpracovaná data.
Například při výpočtu vzdálenosti od referenčního bodu nedělám:
x=objekt.getX()-x0;
y=objekt.getY()-y0;
vzdalenost=Math.sqrt(x*x+y*y);
ale svěřím to metodě, kterou mám v objektu a která má k těmto proměnným přístup:
vzdalenost=objekt.vzdalenost(x0,y0);
Místo dvou getterů mám tedy jeden viewer, který mi poskytne požadovaná data.
Je to jen příklad, který mě zrovna napadl a jehož princip je snad jasný. Přikázal jsem objektu, aby mi řekl, jak je od souřadnic (x0,y0) daleko. Nesahám na vnitřní proměnné a nepoužívám primitivní getter. Samozřejmě je vhodnější s dvojicí (x,y) pracovat jako s objektem, strukturou nebo třeba komplexním číslem. Je to jen příklad.
Podobně místo primitivního setteru zavolám metodu, které předám nezpracovaná a neošetřená data, se kterými si musí nějak poradit, uložit do takového schématu, jaký potřebuje a vrátit status. Také může požadovanou operaci odmítnout (např. vyhodit výjimku), záleží to jen na něm. Tím se z obyčejného setteru stane controller.
Architektura MVC nemusí být jen mezi objekty, ale může být i uvnitř objektu mezi metodami a datovými strukturami.