Singletons haben zwar nützlich, um eine einzelne Instanz einer Klasse zu gewährleisten, aber mehrere Nachteile, die sich auf die Wartbarkeit und Skalierbarkeit von Anwendungen auswirken können, einschließlich derjenigen, die MVVMCross verwenden. Hier sind einige der wichtigsten Probleme:
1. Testbarkeitsprobleme **
Singletons sind notorisch schwer zu testen, weil sie den Zustand besitzen und ihren eigenen Lebenszyklus verwalten. Dies macht es schwierig, Unit -Tests zu schreiben, die nicht versehentlich mit dem Netzwerk oder anderen externen Systemen interagieren. In MVVMCross, wo Tests entscheidend für die Gewährleistung der Zuverlässigkeit von View -Modellen und anderen Komponenten sind, können Singletons die Fähigkeit behindern, einzelne Komponenten effektiv zu isolieren und zu testen [1] [4].2. Datenkonsistenz und Multithreading -Probleme **
In Umgebungen mit mehreren Threaden können Singletons zu Datenkonsistenz führen, wenn sie nicht ordnungsgemäß synchronisiert sind. Dies kann zu nicht deterministischem Verhalten führen, was es schwierig macht, Probleme zu debuggen. Es ist zwar möglich, Singletonen-Thread-Safe zu machen, dies fügt zwar die Komplexität hinzu und ist nicht immer richtig [2] [4].3. Versteckte Abhängigkeiten und Kopplung **
Singletons ermutigen verborgene Abhängigkeiten, indem sie einen globalen Zugang zu Ressourcen gewährt. Dies kann zu einer engen Kopplung zwischen Klassen führen, da sie alle von der konkreten Implementierung des Singletons abhängen. In MVVMCross, wo eine lose Kopplung für die Aufrechterhaltung einer sauberen Architektur von Vorteil ist, können Singletons dieses Prinzip untergraben, indem es schwierig wird, Komponenten zu ändern oder zu ersetzen, ohne das gesamte System zu beeinflussen [2] [3].4. Verstoß gegen feste Prinzipien **
Singletons verstoßen gegen mehrere solide Prinzipien:- Prinzip der Einzelverantwortung (SRP): Singletonen verwalten neben ihrer Hauptverantwortung häufig ihren eigenen Lebenszyklus, was zu unnötiger Komplexität führen kann.
-Abhängigkeitsinversionsprinzip (DIP): Hochstufe Module sollten nicht von Details auf niedriger Ebene abhängen, aber bei Singletons tun sie es oft, da sie sich auf die konkrete Implementierung des Singletons verlassen [2] [3].
5. Skalierbarkeit und Flexibilitätsbeschränkungen **
Singletons können die Skalierbarkeit einschränken, indem es schwierig ist, sich an sich ändernde Anforderungen anzupassen. Wenn eine Anwendung mehrere Instanzen einer Ressource oder Änderung der Verwaltung von Ressourcen ändern muss, können Singletons zum Engpass werden. In MVVMCross, wo Flexibilität für den Umgang mit verschiedenen Plattformen und Konfigurationen wichtig ist, können Singletons diese Funktionen einschränken [7].6. staatliche Managementherausforderungen **
Singletons tragen den Zustand für die Lebensdauer der Anwendung, was es schwierig machen kann, den Zustand effektiv zurückzusetzen oder zu verwalten. Dies ist besonders problematisch in Anwendungen, bei denen der Zustand häufig aktualisiert oder aktualisiert werden muss [4].Alternativen zu Singletons
Um diese Nachteile zu vermeiden, wenden sich Entwickler häufig der Abhängigkeitsinjektion als flexiblere und wartbare Alternative zu. Die Abhängigkeitsinjektion ermöglicht es, dass Komponenten locker gekoppelt und leicht getestet werden, indem Abhängigkeiten durch Konstruktoren oder andere Mittel bereitgestellt werden, anstatt sich auf globale Instanzen zu stützen [1] [7]. In MVVMCross kann die Verwendung von Abhängigkeitsinjektionen dazu beitragen, eine saubere, skalierbare Architektur aufrechtzuerhalten, die einfacher zu testen und aufrechtzuerhalten ist.Zitate:
[1] https://www.reddit.com/r/iosprogramming/commentments/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-why-youd-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-tenefits-drawbacks-using-singleton-1e
[8] https://softwareEngineering.stackexchange.com/questions/40373/so--singletons-re-bad-then-what