2011-05-30 2 views
2

je la question folowing:Ce qui est préférable: un Enum ou un singleton

Quelle est la façon d'utiliser le preferred statut dans le code, un ENUM OU singleton?

J'ai dans une base de données stocké les valeurs d'état avec leurs ID. Si le statut change dans de DB, il faudrait aussi quelques changements dans le code.

Quelqu'un at-il maintenant ce qui est le plus préféré, basé sur des conventions?

Je regardais sur internet mais je n'ai pas trouvé de réponse claire.

+0

Ce qui est « un ENUM d'un singleton "? –

+1

pas sûr que je comprends la question. qu'est-ce que "enum d'un singleton"? Si vous voulez dire "enum OU singleton", cela n'a toujours pas de sens. enum est un type de valeur utilisé pour définir un ensemble de constantes nommé. singleton est un modèle dans lequel vous définissez une instance de quelque chose à utiliser par l'ensemble de votre application. – RPM1984

+0

Que voulez-vous dire exactement? –

Répondre

5

Cela dépend en partie de savoir si les ID de vos statuts ont des valeurs garanties ou si les ID peuvent changer par base de données (via un IDENTITY). Personnellement, pour les statuts je préfère fixe - qui vous donne le plus de flexibilité, et moins de frais généraux - vous pouvez choisir d'utiliser une énumération (ou peut-être certains consts si plus pratique), et vous n'aurez jamais à ajouter une indirection c'est open ".

Ce n'est pas toujours possible, et quand il n'est pas, il est toujours utile de les mettre en cache et de les réutiliser (pour éviter de toucher le DB pour cette recherche). Cependant, j'éviterais un singleton, surtout parce qu'il ne fonctionnera pas bien si vous avez besoin de parler à plus d'une base de données - les identifiants de chacun pourraient bien être différents. Cependant, toute implémentation de cache appropriée (ou peut-être IoC/DI) devrait vous permettre de stocker les données appropriées (probablement un type de dictionnaire). Singletons sont aussi juste un peu de douleur généralement si vous aimez tester etc.

Mais: un enum et fixe des valeurs id est beaucoup plus simple.

Notez que sous toute mise en œuvre, modification de la liste d'état est une opération non négligeable, pas moins ce sera un grand UPDATE (ou plusieurs si vous dénormaliser).

+0

Merci cela me le rend très clair –

3

Si vous avez l'intention d'utiliser le statut dans l'application et est normalisée à travers alors il serait mieux adaptée à un Enum

Enum Status 
{Open, Pending, Closed, Deferred} 

Cela rend également le code plus lisible

+0

j'aime aussi ajouter des initialiseurs pour enums Open = 0, Pending = 1 ... – Reniuz

Questions connexes