Vous (l'OP) semblent préoccupés par OO design, eh bien, je vais le mettre de cette façon, lorsque la réflexion sur les variables statiques choses. Le concept de base est l'encapsulation et de la réutilisation; il y a des choses que vous ne s'intéressent pas à réutiliser, mais vous veulent presque toujours l'encapsulation. Si c'est une variable statique, il n'est pas vraiment encapsulé, est-il? Pensez à qui en a besoin pour y accéder, pourquoi, et dans quelle mesure vous pouvez les MASQUER, depuis le code client. De bonnes conceptions peuvent souvent changer leurs internes sans trop de casse pour les clients, c'est ce que vous voulez penser au sujet de. Je suis d'accord avec Scott Meyers (Effective C++) à propos de beaucoup de choses. La programmation orientée objet va au-delà du mot-clé class. Si vous n'avez jamais entendu parler de cela, chercher des propriétés: oui, ils peuvent être statiques, et C# est une très bonne façon de les utiliser. Contrairement à littéralement à l'aide d'une statique de la variable. Comme je l'ai déjà évoqué au début de cet élément de la liste: pensez à la façon de ne pas se tirer dans le pied, plus tard, comme les changements de classe avec le temps, c'est quelque chose que beaucoup d'entre eux ne parviennent pas à le faire lors de la conception des classes.
Jetez un oeil à ce framework Rx quelqu'un a mentionné. Le modèle de thread à utiliser, pour une telle situation que vous avez décrite, n'est pas facilement decidable sans plus de détails au sujet du cas d'utilisation à mon humble avis. Assurez-vous que vous savez ce que vous faites avec les threads. Beaucoup de gens ne peuvent pas comprendre les threads pour sauver leur vie; c'est pas difficile, étant de la bande de roulement coffre-fort peut être lors de la (re)à l'aide de code. Rappelez-vous les contrôleurs doivent souvent être distincts de l'objet du contrôle de gestion (E. g. pas de la même classe); si vous ne le connaissez pas, cherchez un livre sur l'architecture MVC et acheter de la bande des quatre.
Dépend de ce que vous avez besoin. Pour de nombreuses applications, une classe qui est presque entièrement rempli avec des données statiques, est assez bon; comme un singleton pour gratuit. Cela peut être fait très OO. Parfois vous serait plutôt plusieurs instances ou de jouer avec l'injection, ce qui le rend plus complexe.
Je suggère de threads et d'événements. La facilité de rendre le code événementiel est en fait l'une des plus belle choses au sujet de C# à mon humble avis.
Hmm, tuant les singletons...
Dans mon expérience, beaucoup de la plus commune utilise que des jeunes programmeurs de mettre des singletons, ne sont guère plus que des déchets de la classe de mots clés. Savoir quelque chose qu'ils voulaient dire qu'avec un état de module en cours de déploiement dans un highlander classe; et il y a des mauvaises singleton implémentations de là à égaler. Si c'est parce qu'ils n'ont pas réussi à savoir ce qu'ils font, ou seulement avaient Java au collège, je ne sais pas. De retour dans C de la terre, elle est appelée à l'aide de données à la portée du fichier et exposer une API. En C# (et Java) vous êtes en quelque sorte lié à une classe plus que de nombreuses langues. OUPS != classe de mots-clés; apprendre la lhs.
Un décemment écrit la classe peut utiliser des données pour mettre en œuvre efficacement un singleton, et de faire le compilateur ne le travail des jambes de garder un, ou comme l'une que vous allez jamais à obtenir de quoi que ce soit. Ne PAS remplacer les singletons avec l'héritage, à moins que vous sérieusement de savoir ce que le diable que vous faites. Mal fait de l'héritage de telles choses, conduit à de plus en plus fragiles code qui connaît sa réputation pour beaucoup. Les Classes doivent être muet, les données smart. Cela semble stupide, sauf si vous regardez la déclaration profondément. L'utilisation de l'héritage à mon humble avis, pour une telle chose, est généralement une mauvaise chose(tm), les langues, le concept de modules/packages pour une raison.
Si vous êtes pour elle, hé, vous n'avez convertir les singletons il y a des siècles droit? Asseyez-vous et pensez un peu: comment puis-je le mieux la structure de cette application, afin de le faire fonctionner XXX, alors, de penser comment le faire XXX manière impacts de choses, par exemple le fait d'une façon va être une source de conflit entre les threads? Vous pouvez aller sur beaucoup de choses en une heure comme ça. Quand vous vieillissez, vous apprendrez les meilleures techniques.
Voici une suggestion pour un XXX façon de commencer avec: (visualiser) écrire(^Hing) un composite de contrôleur de classe, qui fonctionne comme un gestionnaire sur les objets qu'il référence. Ces objets ont été vos singletons, pas le contrôleur est titulaire d'eux, et qu'ils sont, mais des instances de ces classes. Ce n'est pas le meilleur design pour un grand nombre d'applications (en particulier peut être un problème fortement filetée chers à mon humble avis), mais il ne résout généralement quelles sont les causes de la plupart des jeunes à atteindre pour un singleton, et il va effectuer convenablement pour un large éventail de programmes. C'est euh, comme le modèle de conception CS 102. Oubliez le singleton que vous avez appris dans CS 607.
Que le contrôle de la classe, peut-être "Application" serait plus adéquat ;), essentiellement pour résoudre vos besoin pour les singletons et pour le stockage de la configuration. Comment le faire dans un sublime OO moyen (en supposant que vous ne comprendre la programmation orientée objet) et de ne pas se tirer dans le pied (de nouveau), est un exercice pour votre propre éducation.
Si elle montre, je ne suis pas un fan de ce qui est appelé le pattern singleton, en particulier la façon dont il est souvent utilisé à mauvais escient. Le déplacement d'une base de code loin d'elle, dépend souvent de la façon dont beaucoup de refactoring vous êtes prêt à l'utiliser. Les Singletons sont comme les variables globales: pratique mais pas de beurre. Hmm, je pense que je vais mettre ça dans mes citations de fichier, a une belle phrase...
Honnêtement, vous en savez plus sur le code de base et l'application en question, alors n'importe qui ici. Donc, personne ne peut le concevoir pour vous, et des conseils en parle moins de l'action, à moins d'où je viens.