Pergunta

Como você acha que é uma boa idéia ter uma tal enumeração:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

A pergunta é sobre a semântica dos nomes valores, ou seja, tanto a porcentagem e os pés quadrados. Eu realmente acredito que não é uma boa idéia, mas eu não poderia encontrar e diretrizes, etc. em apoio a este.

EDIT: Isso será usado para determinar o estado de uma entidade - ou seja, como uma leitura única propriedade para descrever um estado de um objeto. Se sabemos que o espaço total (ou seja, o próprio objeto sabe disso), temos a opção de converter internamente, portanto, ou têm apenas percentual, ou pés quadrados, ou ambos. O argumento é que "ambos" não é uma boa idéia.

A descrição acima é um exemplo claro, mas o verdadeiro problema é que alguns provedores de dados nos enviar totaliza (sq.f.), e outros percentual, e meu objetivo é unificar a interface do usuário. Eu sou livre para fazer algumas aproximações, de modo que os valores exatos serão adaptadas com base em quão preciso queremos apresentar as informações.

A questão é apenas sobre a semântica dos nomes de valor, não o conteúdo -. Ou seja, se é uma boa idéia de colocar porcentagem em uma (potencial) int enum

Foi útil?

Solução

A resposta : Não, não é uma boa idéia para enums uso para representar valores. Especialmente valores em duas escalas semanticamente distintas. Você não deve usar enums para valores.

A razão : Qual é a relação entre os valores de enumeração das duas escalas, como Percent10 e SqF600? Como você expandir a lista de valores que você pode representar dentro de seu código? Como você faz operações de comparação e aritméticas sobre esses valores?

A sugestão (não pediu, mas, no entanto, aqui está: -.)) : A semântica do que você está tentando fazer seria melhor refletida por uma estrutura que contém dois campos - um para a área absoluta e um para percentual disponível de que a área absoluta. Com tal estrutura pode representar qualquer coisa que você pode representar com os enums acima. Por exemplo, os fornecedores de dados que lhe dão área absoluta, são representados com um struct com a área e 100% disponível. Os provedores de dados que lhe dão porcentagem, são representados com um struct com a percentagem que definir ea área absoluta de tal forma que a percentagem de que a área é a área real disponível do provedor de dados quer denunciar. Você começa "normalizada" representação dos dados de ambos os tipos de provedores e você pode adicionar algumas operadoras para permitir a comparação e cálculos aritméticos com instâncias.

Outras dicas

Se possível, prefiro quebrar o seu exemplo em dois valores, onde o enum é "por cento" e "Squarefeet" eo segundo valor é o quantificador. Amarre-los juntos em um struct.

Se o contexto permite-lo, pode ser ainda melhor para criar dois tipos de mensagens publicitárias "por cento" e "Squarefeet" e, em seguida, criar algumas sobrecargas de operador, para que possa fazer coisas como "nova Squarefeet (500) + novo Percent ( 20);" e eliminar o uso de enums.

Atualização: seu esquema de nomeação seria apropriado se os valores foram indústria termos reconhecidos, quase ao ponto de ser símbolos. Por exemplo, é seguro para ter uma enumeração que contém valores tais como "ISO9001", em vez de dois valores (um enum contendo "ISO" e um int de 9001). Também seria apropriado ter uma enumeração como abaixo:

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

Se os termos "Percentage10" e "Sqf500" não são termos de arte ou bem definido em uma especificação, dicionário de dados, etc., então é inadequada para usá-los como valores de um enum.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top