Les singletons, bien que utiles pour assurer une seule instance d'une classe, ont plusieurs inconvénients qui peuvent avoir un impact sur la maintenabilité et l'évolutivité des applications, y compris celles utilisant MVVMCross. Voici quelques-uns des principaux problèmes:
1. Problèmes de testabilité **
Les singletons sont notoirement difficiles à tester car ils détiennent l'état et gérent leur propre cycle de vie. Cela rend difficile d'écrire des tests unitaires qui n'interagissent pas par inadvertance avec le réseau ou d'autres systèmes externes. Dans MVVMCross, où les tests sont cruciaux pour assurer la fiabilité des modèles de vue et d'autres composants, les singletons peuvent entraver la capacité d'isoler et de tester efficacement les composants individuels [1] [4].2. Problèmes d'incohérence des données et de multithreading **
Dans des environnements multithreads, les singletons peuvent entraîner une incohérence des données s'il n'est pas correctement synchronisé. Cela peut entraîner un comportement non déterministe, ce qui rend difficile le débogage des problèmes. Bien qu'il soit possible de fabriquer des singletons thread-safe, cela ajoute de la complexité et n'est pas toujours fait correctement [2] [4].3. Dépendances cachées et couplage **
Les singletons encouragent les dépendances cachées en fournissant un point d'accès mondial aux ressources. Cela peut conduire à un couplage serré entre les classes, car ils dépendent tous de l'implémentation concrète de Singleton. Dans MVVMCross, où le couplage lâche est bénéfique pour maintenir une architecture propre, les singletons peuvent saper ce principe en rendant difficile le changement ou le remplacement des composants sans affecter l'ensemble du système [2] [3].4. Violation des principes solides **
Les singletons violent plusieurs principes solides:- Principe de responsabilité unique (SRP): Les singletons gèrent souvent leur propre cycle de vie en plus de leurs principales responsabilités, ce qui peut conduire à une complexité inutile.
- Principe d'inversion de dépendance (DIP): les modules de haut niveau ne devraient pas dépendre de détails de bas niveau, mais avec les singletons, ils le font souvent, car ils s'appuient sur l'implémentation concrète du singleton [2] [3].
5. Limitations d'évolutivité et de flexibilité **
Les singletons peuvent limiter l'évolutivité en rendant difficile l'adaptation aux exigences changeantes. Si une application doit gérer plusieurs instances d'une ressource ou modifier la façon dont les ressources sont gérées, les singletons peuvent devenir un goulot d'étranglement. Dans MVVMCross, où la flexibilité est importante pour gérer différentes plates-formes et configurations, les singletons peuvent restreindre ces capacités [7].6. Défis de gestion de l'État **
Les singletons portent l'état de la durée de vie de l'application, ce qui peut rendre difficile la réinitialisation ou la gestion efficace de l'état. Cela est particulièrement problématique dans les applications où l'état doit être rafraîchi ou mis à jour fréquemment [4].Alternatives aux singletons
Pour éviter ces inconvénients, les développeurs se tournent souvent vers l'injection de dépendance comme une alternative plus flexible et maintenable. L'injection de dépendance permet aux composants d'être couplés de manière lâche et facilement testés en fournissant des dépendances par des constructeurs ou d'autres moyens, plutôt que de s'appuyer sur des instances globales [1] [7]. Dans MVVMCross, l'utilisation d'injection de dépendance peut aider à maintenir une architecture propre et évolutive qui est plus facile à tester et à entretenir.Citations:
[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-why-you-should-avoid-singletons.html
[4] https://matteomferdini.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://softwareensineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what