Singletons, hoewel nuttig voor het waarborgen van een enkel exemplaar van een klasse, hebben verschillende nadelen die de onderhoudbaarheid en schaalbaarheid van toepassingen kunnen beïnvloeden, waaronder die van MVVMCross. Hier zijn enkele van de belangrijkste problemen:
1. Testbaarheidsproblemen **
Singletons zijn notoir moeilijk te testen omdat ze de staat vasthouden en hun eigen levenscyclus beheren. Dit maakt het een uitdaging om eenheidstests te schrijven die niet per ongeluk interageren met het netwerk of andere externe systemen. In MVVMCross, waar testen cruciaal is om de betrouwbaarheid van weergavemodellen en andere componenten te waarborgen, kunnen singletons het vermogen om individuele componenten effectief te isoleren en te testen te belemmeren [1] [4].2. Gegevensconsistentie en multithreadingproblemen **
In multi-threaded omgevingen kunnen singletons leiden tot gegevensconsistentie als ze niet correct worden gesynchroniseerd. Dit kan leiden tot niet-deterministisch gedrag, waardoor het moeilijk is om problemen op te lossen. Hoewel het mogelijk is om singletons draadveilig te maken, voegt dit complexiteit toe en wordt niet altijd correct gedaan [2] [4].3. Verborgen afhankelijkheden en koppeling **
Singletons moedigen verborgen afhankelijkheden aan door een wereldwijd toegangspunt tot middelen te bieden. Dit kan leiden tot een strakke koppeling tussen klassen, omdat ze allemaal afhankelijk zijn van de concrete implementatie van de singleton. In MVVMCross, waar losse koppeling gunstig is voor het handhaven van een schone architectuur, kunnen singletons dit principe ondermijnen door het moeilijk te maken om componenten te veranderen of te vervangen zonder het hele systeem te beïnvloeden [2] [3].4. Overtreding van solide principes **
Singletons overtreden verschillende solide principes:- Single Responsibility Principle (SRP): singletons beheren vaak hun eigen levenscyclus naast hun primaire verantwoordelijkheden, wat kan leiden tot onnodige complexiteit.
-Afhankelijkheidsinversieprincipe (DIP): Modules op hoog niveau mogen niet afhangen van details op laag niveau, maar met singletons doen ze dat vaak, omdat ze vertrouwen op de concrete implementatie van de singleton [2] [3].
5. Schaalbaarheid en flexibiliteitsbeperkingen **
Singletons kunnen de schaalbaarheid beperken door het moeilijk te maken om zich aan te passen aan veranderende vereisten. Als een applicatie meerdere instanties van een bron moet verwerken of moet wijzigen hoe middelen worden beheerd, kunnen singletons een bottleneck worden. In MVVMCross, waar flexibiliteit belangrijk is voor het verwerken van verschillende platforms en configuraties, kunnen singletons deze mogelijkheden beperken [7].6. Uitdagingen voor staatsmanagement **
Singletons dragen de staat voor de levensduur van de aanvraag, waardoor het moeilijk kan worden om de staat effectief te resetten of te beheren. Dit is met name problematisch in toepassingen waarbij de toestand vaak moet worden vernieuwd of bijgewerkt [4].Alternatieven voor singletons
Om deze nadelen te voorkomen, veranderen ontwikkelaars vaak in afhankelijkheidsinjectie als een flexibeler en onderhoudbaar alternatief. Afhankelijkheidsinjectie maakt het mogelijk om componenten losjes gekoppeld te worden en gemakkelijk te testen door afhankelijkheden te bieden via constructeurs of andere middelen, in plaats van te vertrouwen op globale instanties [1] [7]. In MVVMCross kan het gebruik van afhankelijkheidsinjectie helpen bij het handhaven van een schone, schaalbare architectuur die gemakkelijker te testen en te onderhouden is.Citaten:
[1] https://www.reddit.com/r/iosprogramming/comments/9zxqj1/why_i_cant_use_singleton_why_it_is_bad_design/
[2] https://www.youtube.com/watch?v=x6GBDWFNIN4
[3] https://www.davidtanzer.net/david's%20blog/2016/03/14/6-reasons-whyy-youbould-avoid-singletons.html
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-design-pattern/56168
[6] https://www.reddit.com/r/androiddev/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-drawbacks-using-singleton-1e
[8] https://softwareGineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what