PDA

Volledige versie bekijken : Voordelen en nadelen van static functions en variables


Steeltje
%Europe/Berlin %330 %2008, 08:56
Met mijn collega heb ik regelmatig discussie over het gebruik van static variables en functions.
Bijvoorbeeld: in onze applicatie maken we gebruik van een webservice object welke in het begin van de applicatie aangemaakt wordt. Wat heeft meer voordelen: het webserver object in een public static variable te plaatsen van de webserver class, of de class als een singleton uit te voeren en in de class een public function getWebserver () te maken?

Ander voorbeeld: Ik heb een class XmlResource waarin alleen een static function parse in staat welke een xml structuur parsed naar een gestructureerd object. Deze gebruik ik in verschillende classes als volgt :

var data : Object = XmlResource.parse (myXML);

of kan ik beter een public function parse maken welke ik als volgt gebruik:

var parser: XmlResource = new XmlResource();
var data : Object = parser.parse (myXML);

Weten jullie wat de voor en nadelen zijn van static?
Bedankt Stefan

mknol
%Europe/Berlin %343 %2008, 09:14
Ik heb laatst gelezen dat Singletons ontzettend evil zijn. Zijn best veel discussies over te vinden op internet, vooral over het feit dat het tegen OOP-concept ingaat. Singletons worden vaak gebruikt als zijnde een _global. Niet best dus ;)

Leuk artikel om te lezen:
http://steve.yegge.googlepages.com/singleton-considered-stupid

TheDutch
%Europe/Berlin %347 %2008, 09:20
Static members zijn niet te overerven dat is zeker een beperking. Verder heeft een static class geen data type omdat er geen instantie van gemaakt wordt. Natuurlijk heb je wel een data type wanneer je er toch een instantie van maakt, maar dan verlies je alle static members omdat deze in een instantie niet beschikbaar zijn. Voor static members kan je geen interface gebruiken wat het onmogelijk maakt om polymorfisme toe te passen.

Ik denk dat dit ze zo'n beetje wel zijn, alle nadelen van een static class. Gebruik dus alleen een static class wanneer deze nadelen er niet toe doen zoals bij utility classes, anders gebruik het singleton pattern wanneer dit echt nodig is :).

@mknol: Singletons zijn niet per definitie evil. Echter zoals met meer dingen worden ze vaak misbruikt zoals binnen de ModelLocater van Cairngorm, erg slecht! Wanneer goed gebruikt (lees: waarvoor hij bedoeld is) is het een prima pattern om anders onmogelijke situaties keurig mee op te lossen.