J'ai passé les deux dernières heures de lecture sur le modèle singleton et pourquoi ne pas l'utiliser, entre autres, ces sites vraiment bons:Alternatives à Singleton lorsque l'accès global est recherché
- Singleton I love you, but you're bringing me down
- How to Think About the "new" Operator with Respect to Unit Testing
- Where have all the Singletons Gone?
Je suppose que beaucoup d'entre vous le savez déjà ce. En regardant mon code après avoir lu cela, je suis clairement l'un des 95% de programmeurs qui ont mal compris et mal utilisé le pattern singleton.
Pour certains cas, je peux clairement enlever le modèle, mais il y a des cas où je ne suis pas sûr ce qu'il faut faire:
Je sais singletons pour l'exploitation forestière sont acceptées, l'une des raisons pour cela étant que l'information ne circule que dans les mais pas retour dans l'application (juste dans le fichier journal ou la console, etc, bien sûr).
Qu'en est-il d'autres classes qui ne répondent pas à ces critères mais sont requises par beaucoup de classes?
Par exemple, j'ai un objet settings qui est requis par beaucoup de classes. Par beaucoup, je veux dire plus de 200.
J'ai lu dans d'autres questions SO comme "Singletons: good design or a crutch?", et tous ont souligné pourquoi l'utilisation de singletons est déconseillée.
Je comprends les raisons pour cela, mais il me reste une question importante:
Comment puis-je concevoir une classe qui a besoin d'une instance unique, accessible de partout, sinon en utilisant le modèle Singleton?
Les options que je peux penser serait:
- Utilisez plutôt une classe statique (bien que je ne vois pas comment ce serait mieux, regarder POO et tests unitaires). Faites-le créer dans une ApplicationFactory et effectuez une injection de dépendance sur chaque classe qui en a besoin (n'oubliez pas que c'est 200+ dans certains cas).
- Utilisez un singleton de toute façon, car le bonus d'accès global l'emporte sur les inconvénients dans ce cas.
- Quelque chose de complètement différent.
Je vote pour # 2 et/ou # 3 car je n'ai pas la réponse finale non plus. Ok # 4 est une option aussi :-) – home