Singletony, i když jsou užitečné pro zajištění jediné instance třídy, mají několik nevýhod, které mohou ovlivnit udržovatelnost a škálovatelnost aplikací, včetně těch, které používají MVVMCross. Zde jsou některé z klíčových otázek:
1. Problémy s testovatelností **
Singletony jsou notoricky obtížné testovat, protože drží stav a spravují svůj vlastní životní cyklus. Díky tomu je náročné psát testy jednotek, které neúmyslně neinteragují se sítí nebo jinými externími systémy. V MVVMCrossu, kde je testování zásadní pro zajištění spolehlivosti modelů pohledu a dalších komponent, mohou singletony bránit schopnosti efektivně izolovat a testovat jednotlivé komponenty [1] [4].2.. Data nekonzistence a problémy s multithreading **
Ve více vláknových prostředích mohou singletony vést k nekonzistentnosti dat, pokud nejsou správně synchronizovány. To může vést k nedeterministickému chování, což ztěžuje ladění problémů. I když je možné učinit singletons ovlivněný vlákno, přidává to složitost a není vždy provedeno správně [2] [4].3. Skryté závislosti a spojení **
Singletony podporují skryté závislosti poskytováním globálního přístupu ke zdrojům. To může vést k těsnému spojení mezi třídami, protože všechny závisí na betonové implementaci singletonu. V MVVMCrossu, kde je volná vazba prospěšná pro udržování čisté architektury, mohou singletony tento princip podkopat tím, že ztěžují změnu nebo nahrazení komponent, aniž by to ovlivnilo celý systém [2] [3].4. porušení solidních principů **
Singletony porušují několik solidních principů:- Princip jediné odpovědnosti (SRP): Singletony často spravují svůj vlastní životní cyklus kromě svých primárních povinností, což může vést k zbytečné složitosti.
-Princip inverze závislosti (DIP): Moduly na vysoké úrovni by neměly záviset na detailech nízké úrovně, ale u singletonů často dělají, protože se spoléhají na betonovou implementaci singletonu [2] [3].
5. Omezení škálovatelnosti a flexibility **
Singletony mohou omezit škálovatelnost tím, že ztěžuje přizpůsobení se měnícím se požadavkům. Pokud aplikace potřebuje zvládnout více instancí zdroje nebo změnit způsob, jakým jsou zdroje spravovány, mohou se singletons stát úzkým prostorem. V MVVMCrossu, kde je flexibilita důležitá pro manipulaci s různými platformami a konfiguracemi, mohou tyto schopnosti omezit [7].6. Výzvy pro správu státu **
Singletony nesou stav po celý život aplikace, což může ztěžovat efektivní resetování nebo spravování stavu. To je obzvláště problematické v aplikacích, kde je třeba stát často osvěžovat nebo aktualizovat [4].Alternativy k singletons
Aby se těmto nevýhodám zabránilo, vývojáři se často obracejí na injekci závislosti jako flexibilnější a udržovatelnější alternativu. Injekce závislosti umožňuje, aby se komponenty volně spojily a snadno testovaly poskytováním závislostí konstruktéry nebo jinými prostředky, spíše než se spoléhaly na globální instance [1] [7]. V MVVMCrossu může použití injekce závislosti pomoci udržovat čistou, škálovatelnou architekturu, která se snadněji testuje a udržuje.Citace:
[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-roční období-why you-should-aved-singletons.html
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-design-patern/56168
[6] https://www.reddit.com/r/androiddev/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-awbacks-using-Singleton-1e
[8] https://softwareEngineering.stackexchange.com/questions/40373/so-Singletons-are-bad-then-what