Singletoniem, lai arī tas ir noderīgi, lai nodrošinātu vienu klases gadījumu, ir vairāki trūkumi, kas var ietekmēt lietojumprogrammu uzturējamību un mērogojamību, ieskaitot tos, kuri izmanto MVVMCross. Šeit ir daži no galvenajiem jautājumiem:
1. Pārbaudes jautājumi **
Singletoniem ir ļoti grūti pārbaudīt, jo viņi rīko stāvokli un pārvalda savu dzīves ciklu. Tas padara izaicinājumu rakstīt vienības testus, kas netīšām mijiedarbojas ar tīklu vai citām ārējām sistēmām. MVVMCROSS, kur pārbaude ir būtiska, lai nodrošinātu skatu modeļu un citu komponentu uzticamību, singletoni var kavēt spēju efektīvi izolēt un pārbaudīt atsevišķus komponentus [1] [4].2. Datu neatbilstība un daudznozaru problēmas **
Vairāku vītņu vidē singletoni var izraisīt datu neatbilstību, ja tā nav pareizi sinhronizēta. Tas var izraisīt nedeterministisku izturēšanos, padarot grūti atkļūdojot problēmas. Lai gan ir iespējams padarīt singletonus drošu, tas palielina sarežģītību un ne vienmēr ir izdarīts pareizi [2] [4].3. Slēptās atkarības un savienošana **
Singletons veicina slēptās atkarības, nodrošinot globālu piekļuvi resursiem. Tas var izraisīt ciešu savienojumu starp klasēm, jo tās visas ir atkarīgas no Singleton konkrētās ieviešanas. MVVMCROSS, kur brīva savienošana ir noderīga, lai uzturētu tīru arhitektūru, singletoni var graut šo principu, apgrūtinot komponentu maiņu vai aizstāšanu, neietekmējot visu sistēmu [2] [3].4. cieto principu pārkāpums **
Singletons pārkāpj vairākus stabilus principus:- Vienas atbildības princips (SRP): Singletons papildus galvenajiem pienākumiem bieži pārvalda savu dzīves ciklu, kas var izraisīt nevajadzīgu sarežģītību.
-Atkarības inversijas princips (DIP): augsta līmeņa moduļi nevajadzētu būt atkarīgiem no zema līmeņa detaļām, bet ar singletoniem viņi bieži to dara, jo tie paļaujas uz Singletona konkrēto ieviešanu [2] [3].
5. mērogojamība un elastības ierobežojumi **
Singletons var ierobežot mērogojamību, apgrūtinot pielāgošanos mainīgajām prasībām. Ja lietojumprogrammai ir jārīkojas ar vairākiem resursa gadījumiem vai jāmaina resursu pārvaldīšana, singletoni var kļūt par sašaurinājumu. MVVMCROSS, kur elastība ir svarīga dažādu platformu un konfigurāciju apstrādei, singletoni var ierobežot šīs iespējas [7].6. Valsts vadības izaicinājumi **
Singletons pārvadā stāvokli uz lietojumprogrammas kalpošanas laiku, kas var apgrūtināt stāvokļa efektīvu atiestatīšanu vai pārvaldīšanu. Tas ir īpaši problemātiski lietojumprogrammās, kurās stāvoklis bieži ir jāatsvaidzina vai jāatjaunina [4].Alternatīvas singletoniem
Lai izvairītos no šiem trūkumiem, izstrādātāji bieži pāriet uz atkarības injekciju kā elastīgāku un uzturējamu alternatīvu. Atkarības injekcija ļauj komponentus brīvi savienot un viegli pārbaudīt, nodrošinot atkarības caur konstruktoriem vai citiem līdzekļiem, nevis paļaujoties uz globāliem gadījumiem [1] [7]. MVVMCROSS atkarības injekcijas izmantošana var palīdzēt uzturēt tīru, mērogojamu arhitektūru, kuru ir vieglāk pārbaudīt un uzturēt.Atsauces:
[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-rateons-why-you-s-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/androiddev/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