Donc, je veux aller pour un design plus sans singleton dans le futur. Cependant, il semble y avoir beaucoup de tâches dans une application qui ne peut pas être faite de manière significative sans singletons. Je les appelle les "services étendus à l'application", mais ils entrent également dans la même catégorie que les problèmes transversaux, que je corrige habituellement via AOP.Messagerie large application ... sans singletons?
Prenons un exemple:
Je veux une application large file d'attente de messages qui envoie des messages aux composants, chaque composant peut souscrire et y publier, il est une très belle chose multicast. La file d'attente de messages et le système de répartition sont généralement une classe singleton (plutôt courte), ce qui est très facile à implémenter, disons, en C#. Vous pouvez même utiliser la double distribution et utiliser des métadonnées de type message et autres, tout est si facile à faire, c'est presque trivial. Cependant, avoir des singletons n'est pas vraiment une «conception orientée objet» (il introduit des variables globales) et cela rend les tests plus difficiles.
Avez-vous des idées? Je pose cette question parce que je suis disposé à apprendre plus sur ce sujet, beaucoup plus. :-)
Edit:
Je vous remercie tous pour vos réponses à ce jour. Je suppose que j'ai posé la mauvaise question, peut-être que cela aurait dû être "les singletons sont-ils vraiment si mauvais?". Il est un peu déroutant ... les gens vous disent "omg singletons bad smellz !! 11" partout - et d'autre part, ils semblent être la solution la plus simple et la plus simple à ces applications - problèmes de portée .
Ceci est l'un de mes "points de blocage" pour le moment. Résoudre cette énigme.
Je ne vois pas pourquoi Singletons rendrait les tests plus difficiles (bien que cela ne signifie pas que je suggère leur utilisation). Si vous voulez envoyer des messages en C#, je recommande MSMQ. –
Problème avec testing et singletons dans ce cas, si votre composant utilise la messagerie, vous devez configurer une infrastructure complète pour envoyer/recevoir des messages dans les tests - vous ne pouvez plus tester le composant seul. Je ne veux pas utiliser MSMQ, car j'essaie de rester sur xcopy - le plus proche possible du déploiement. – StormianRootSolver
Je vois. Je vais vous laisser à cela alors. –