2012-02-22 4 views
0

Je définis deux classes pour représenter des transactions et j'ai besoin de définir une énumération TransactionType.Meilleures pratiques d'énumération

Un prototype pour ma classe est:

public class Transaction 
{ 
    public enum Type { Income, Outcome } 

    public DateTime Date { get; set;} 
    public Type Type { get; set;} 
    public decimal Amount { get; set;} 
} 

Certaines personnes diraient que enum TransactionType doit être déclarée sur le champ d'espace de noms, mais pour ceux i'would dire que ce type est seulement liée à l'opération si l'OMI il devrait être déclaré à l'intérieur de la classe. Si je le déclare dans la classe, il y a une erreur de compilation dans le champ Déclaration de type. Devrais-je le nommer Types? Devinez pas trop parce que je dois référencer le revenu en tant que type et non en tant que types.

Veuillez dire ce que vous pensez de ce sujet, merci.

Répondre

0

Vous essayez de définir n'importe quel type avec la plus petite visibilité possible. Dans votre cas, public enum Type { Income, Outcome } est public, donc cela n'a pas vraiment d'importance. Si c'était privé alors vous le garderiez comme un type imbriqué. Les meilleures pratiques consisteraient à conserver tous les types publics dans des fichiers distincts.

+0

Mais cette énumération sert uniquement à décrire un type de champ dans ma classe. Cela ne fait que renvoyer cette classe. – TiagoDias

+0

Si oui, vous pouvez le rendre privé et le garder. Si vous en avez besoin, le mieux serait de le déplacer dans un fichier séparé. – oleksii

1

Appelez l'enum TransactionType et déplacez-le en dehors de la classe. Ce nom est aussi descriptif que Transaction.Type et résout le problème de conflit de noms.

+0

Mais cette énumération sert uniquement à décrire un type de champ dans ma classe. Cela ne fait que renvoyer cette classe. – TiagoDias

0

Faites-le ensuite TransactionType. Ce sera encore assez court mais cela rendra votre code beaucoup plus lisible.

+0

Sergey, mais ce n'est pas redondant? – TiagoDias

+0

Eh bien, pas pour moi :) Naming est principalement une question de goût personnel et de lignes directrices de codage d'entreprise (si vous en avez). Je viens de suggérer comment je nommerai cette énumération. –

2

Type est l'une des classes les plus importantes de System.Reflection. J'utiliserais un autre nom parce que c'est très ambigieux.

+0

Imaginez un autre échantillon, le même problème avec des noms différents. Mon problème est simple: nom singulier ou pluriel à l'intérieur ou à l'extérieur de la définition de classe! – TiagoDias

+0

Comme déjà dit par d'autres, si c'est privé, je le placerais à l'intérieur de la classe, sinon dehors. Pluriel ou singulier? J'utilise surtout le singulier, je le trouve plus sympa. Mais ce n'est que mon goût personnel, je ne sais pas s'il y a des choses plus profondes à ce sujet. – HCL