Pregunta

¿Cómo crees, es una buena idea tener una enumeración de este tipo:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

La pregunta es sobre la semántica de los nombres de los valores, es decir, tanto en porcentaje como en pies cuadrados. Realmente creo que no es una buena idea, pero no pude encontrar directrices, etc. para apoyar esto.

EDITAR: se usará para determinar un estado de una entidad, es decir, como una propiedad de solo lectura para describir un estado de un objeto. Si conocemos el espacio total (es decir, el objeto en sí lo sabe), tenemos la opción de convertir internamente, por lo que o solo tenemos un porcentaje, o pies cuadrados, o ambos. El argumento es que " ambos " No es una buena idea.

El ejemplo anterior es un ejemplo, por supuesto, pero el problema real es que algunos proveedores de datos nos envían totales (sq.f.), y otros porcentajes, y mi objetivo es unificar la interfaz de usuario. Soy libre de hacer algunas aproximaciones, por lo que los valores exactos se adaptarán según la precisión con la que deseamos presentar la información.

La pregunta es solo acerca de la semántica de los nombres de valor, no del contenido, es decir, si es una buena idea colocar el porcentaje en una enumeración (potencial).

¿Fue útil?

Solución

La respuesta : No, no es una buena idea usar enumeraciones para representar valores. Especialmente los valores en dos escalas semánticamente distintas. No debes usar enumeraciones para los valores.

La razón : ¿Cuál es la relación entre los valores de enumeración de las dos escalas, como Percent10 y SqF600? ¿Cómo amplía la lista de valores que puede representar dentro de su código? ¿Cómo se realizan las operaciones de comparación y aritmética de estos valores?

La sugerencia (no se solicita, pero sin embargo, aquí está. :-)) : la semántica de lo que se intenta hacer se reflejaría mejor en una estructura que contiene dos campos: uno Para área absoluta y uno para porcentaje disponible de esa área absoluta. Con dicha estructura, puede representar cualquier cosa que pueda representar con las enumeraciones anteriores. Por ejemplo, los proveedores de datos que le dan un área absoluta, están representados con una estructura con el área y el 100% disponible. Los proveedores de datos que le dan el porcentaje, se representan con una estructura con el porcentaje que establecen y el área absoluta, de manera que el porcentaje de esa área es el área real disponible que el proveedor de datos desea informar. Obtienes " normalizado " Representación de los datos de ambos tipos de proveedores y puede agregar un par de operadores para permitir la comparación y cálculos aritméticos con instancias.

Otros consejos

Si es posible, prefiero dividir su ejemplo en dos valores, donde su enumeración es " Porcentaje " y " SquareFeet " y el segundo valor es el cuantificador. Átelos juntos en una estructura.

Si el contexto lo permite, puede ser incluso mejor crear dos tipos de envoltura " Porcentaje " y " SquareFeet " y luego cree algunas sobrecargas de operadores, para que pueda hacer cosas como " new SquareFeet (500) + new Percent (20); " y eliminar el uso de enumeraciones.

Actualización: Su esquema de nombres sería apropiado si los valores fueran términos reconocidos por la industria, casi hasta el punto de ser símbolos. Por ejemplo, es seguro tener una enumeración que contenga valores como " ISO9001 " en lugar de dos valores (una enumeración que contiene "ISO" y una int de 9001). También sería apropiado tener una enumeración como la siguiente:

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

Si los términos " Porcentaje10 " y " Sqf500 " no son términos de arte o están bien definidos en una especificación, diccionario de datos, etc., por lo que no es apropiado usarlos como valores en una enumeración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top