Singletoni, čeprav so koristni za zagotavljanje enega primera razreda, imajo več pomanjkljivosti, ki lahko vplivajo na vzdrževanje in razširljivost aplikacij, vključno s tistimi, ki uporabljajo MVVMcross. Tu je nekaj ključnih vprašanj:
1. Težave s testiranjem **
Singletone je zelo težko preizkusiti, ker držijo stanje in upravljajo svoj življenjski cikel. Zaradi tega je izziv za pisanje testov enot, ki nehote ne sodelujejo z omrežjem ali drugimi zunanjimi sistemi. V MVVMcross, kjer je testiranje ključnega pomena za zagotavljanje zanesljivosti modelov pogleda in drugih komponent, lahko singletoni ovirajo sposobnost učinkovitega izolacije in preizkusa posameznih komponent [1] [4].2. Težave z neskladnostjo in večkratnimi podatki **
V več kot nihanih okoljih lahko singletoni vodijo do neskladnosti podatkov, če ne pravilno sinhronizirani. To lahko povzroči nedeterministično vedenje, zaradi česar je težko odpraviti težave z odpravljanjem napak. Čeprav je mogoče narediti varnostne niti varne Singletone, to dodaja zapletenost in ni vedno pravilno opravljeno [2] [4].3. Skrite odvisnosti in sklopka **
Singletoni spodbujajo skrite odvisnosti z zagotavljanjem globalne točke dostopa do virov. To lahko privede do tesne povezave med razredi, saj so vsi odvisni od singletonove konkretne izvedbe. V MVVMcrossu, kjer je ohlapna sklopka koristna za vzdrževanje čiste arhitekture, lahko singletoni to načelo spodkopajo tako, da težko spremenijo ali zamenjajo komponente, ne da bi vplivali na celoten sistem [2] [3].4. Kršitev trdnih načel **
Singletoni kršijo več trdnih načel:- Načelo posamezne odgovornosti (SRP): Singletoni pogosto upravljajo svoj življenjski cikel poleg svojih primarnih odgovornosti, kar lahko privede do nepotrebne zapletenosti.
-Načelo inverzije odvisnosti (DIP): Moduli na visoki ravni ne smejo biti odvisni od podrobnosti na nizki ravni, ampak s singlotoni pogosto, saj se zanašajo na konkretno izvajanje singletona [2] [3].
5. Omejitve razširljivosti in prilagodljivosti **
Singletoni lahko omejijo razširljivost, tako da se otežujejo prilagajanje spreminjajočim se zahtevam. Če mora aplikacija obravnavati več primerov vira ali spremeniti način upravljanja virov, lahko singletoni postanejo ozko grlo. V MVVMcrossu, kjer je prilagodljivost pomembna za ravnanje z različnimi platformami in konfiguracijami, lahko singletoni omejijo te zmogljivosti [7].6. izzivi državnega upravljanja **
Singletoni nosijo stanje za življenjsko dobo aplikacije, kar lahko otežuje učinkovito ponastavitev ali upravljanje stanja. To je še posebej problematično pri aplikacijah, kjer je treba stanje pogosto osvežiti ali posodabljati [4].alternative singletonom
Da bi se izognili tem pomanjkljivostim, se razvijalci pogosto obrnejo na injekcijo odvisnosti kot bolj prilagodljivo in vzdrževalno alternativo. Vbrizgavanje odvisnosti omogoča, da se komponente ohlapno povežejo in enostavno preizkušajo z zagotavljanjem odvisnosti prek konstruktorjev ali drugih sredstev, namesto da se zanašajo na globalne primere [1] [7]. V MVVMcrossu lahko uporaba vbrizgavanja odvisnosti pomaga ohraniti čisto, razširljivo arhitekturo, ki jo je lažje preizkusiti in vzdrževati.Navedbe:
[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-6-reasons-why-you-should-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/androidd/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what