Question

Comment pensez-vous, est-ce une bonne idée d'avoir une telle énumération:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

La question concerne la sémantique des noms de valeurs, c’est-à-dire les pourcentages et les pieds carrés. Je crois vraiment que ce n'est pas une bonne idée, mais je ne pouvais pas trouver de directives, etc. à l'appui.

EDIT: Ceci sera utilisé pour déterminer l’état d’une entité - c’est-à-dire en tant que propriété en lecture seule pour décrire l’état d’un objet. Si nous connaissons l’espace total (c’est-à-dire que l’objet le connaît lui-même), nous avons la possibilité de convertir en interne, nous n’avons donc qu’un pourcentage, ou un pied carré, ou les deux. L’argument est que "les deux" n'est pas une bonne idée.

Ce qui précède est bien sûr un exemple, mais le vrai problème est que certains fournisseurs de données nous envoient des totaux (sq.f.), et d’autres en pourcentage, et mon objectif est d’unifier l’interface utilisateur. Je suis libre de faire des approximations, donc les valeurs exactes seront adaptées en fonction de la précision avec laquelle nous voulons présenter les informations.

La question ne concerne que la sémantique des noms de valeur, pas le contenu - c’est-à-dire s’il est judicieux de mettre un pourcentage dans un int enum (potentiel).

Était-ce utile?

La solution

La réponse : Non, ce n'est pas une bonne idée d'utiliser des énumérations pour représenter des valeurs. Surtout les valeurs dans deux échelles distinctes sémantiquement Vous ne devez pas utiliser d’énums pour les valeurs.

La raison : Quelle est la relation entre les valeurs enum des deux échelles, telles que Percent10 et SqF600? Comment développez-vous la liste des valeurs que vous pouvez représenter dans votre code? Comment faites-vous la comparaison et les opérations arithmétiques sur ces valeurs?

La suggestion (non demandée, mais néanmoins la voici.: -)) : la sémantique de ce que vous essayez de faire serait mieux reflétée par une structure contenant deux champs - un pour la surface absolue et un pour le pourcentage disponible de cette surface absolue. Avec une telle structure, vous pouvez représenter tout ce que vous pouvez représenter avec les énumérations ci-dessus. Par exemple, les fournisseurs de données qui vous donnent une surface absolue sont représentés avec une structure avec la surface et 100% disponibles. Les fournisseurs de données qui vous donnent un pourcentage sont représentés avec une structure avec le pourcentage qu'ils ont défini et la zone absolue, de sorte que le pourcentage de cette zone est la zone réellement disponible que le fournisseur de données souhaite signaler. Vous obtenez "normalisé". représentation des données des deux types de fournisseurs et vous pouvez ajouter quelques opérateurs pour permettre la comparaison et les calculs arithmétiques avec des instances.

Autres conseils

Dans la mesure du possible, je préférerais diviser votre exemple en deux valeurs, où votre énumération est "Pourcent". et " SquareFeet " et la deuxième valeur est le quantificateur. Nouez-les ensemble dans une structure.

Si le contexte le permet, il est peut-être même préférable de créer deux types d'habillage "Pourcent". et " SquareFeet " puis créez des surcharges d’opérateurs afin que vous puissiez faire des choses comme "new SquareFeet (500) + new Percent (20);" et éliminer l'utilisation d'énums.

Mise à jour: Votre schéma de dénomination serait approprié si les valeurs étaient des termes reconnus par l'industrie, presque au point d'être des symboles. Par exemple, il est prudent d’avoir une énumération contenant des valeurs telles que "ISO9001". plutôt que deux valeurs (une énumération contenant "ISO" et un entier de 9001). Il serait également approprié d'avoir un enum comme ci-dessous:

public enum OperatingSystem
{
    Windows95,
    Windows98,
    Windows2000,
    WindowsXP,
    WindowsVista,
    MacOSClassic,
    MacOSXTiger,
    MacOSXLeopard
}

Si les termes "Pourcentage 10" et " Sqf500 " ne sont pas des termes d’art ou bien définis dans une spécification, un dictionnaire de données, etc., il est donc inapproprié de les utiliser comme valeurs dans une énumération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top