Domanda

Come pensi, è una buona idea avere un tale enum:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

La domanda riguarda la semantica dei nomi dei valori, ovvero percentuale e piedi quadrati. Credo davvero che non sia una buona idea, ma non sono riuscito a trovare e linee guida, ecc. A sostegno di questo.

EDIT: questo sarà usato per determinare uno stato di un'entità - cioè come una proprietà di sola lettura per descrivere uno stato di un oggetto. Se conosciamo lo spazio totale (ovvero l'oggetto stesso lo sa), abbiamo la possibilità di convertire internamente, quindi abbiamo solo una percentuale, o piedi quadrati, o entrambi. L'argomento è che "entrambi" non è una buona idea.

Quanto sopra è ovviamente un esempio, ma il vero problema è che alcuni fornitori di dati ci inviano i totali (sq.f.) e altri percentuale e il mio obiettivo è unificare l'interfaccia utente. Sono libero di fare alcune approssimazioni, quindi i valori esatti verranno adattati in base alla precisione con cui vogliamo presentare le informazioni.

La domanda riguarda solo la semantica dei nomi dei valori, non il contenuto, ovvero se è una buona idea inserire la percentuale in un (potenziale) intum.

È stato utile?

Soluzione

La risposta : No, non è una buona idea usare enum per rappresentare valori. Soprattutto valori in due scale semanticamente distinte. Non dovresti usare enum per i valori.

Il motivo : qual è la relazione tra i valori enum delle due scale, come Percent10 e SqF600? Come si espande l'elenco di valori che è possibile rappresentare nel proprio codice? Come si eseguono operazioni comparative e aritmetiche su questi valori?

Il suggerimento (non richiesto, ma comunque eccolo qui: :-)) : la semantica di ciò che stai cercando di fare sarebbe meglio riflessa da una struttura che contiene due campi: uno per area assoluta e una per percentuale disponibile di quell'area assoluta. Con tale struttura puoi rappresentare qualsiasi cosa tu possa rappresentare con gli enumerazioni sopra. Ad esempio, i fornitori di dati che ti danno un'area assoluta sono rappresentati con una struttura con l'area e disponibile al 100%. I fornitori di dati che ti danno la percentuale, sono rappresentati con una struttura con la percentuale che impostano e l'area assoluta in modo tale che la percentuale di quell'area sia l'area disponibile effettiva che il fornitore di dati desidera segnalare. Ottieni " normalizzato " rappresentazione dei dati da entrambi i tipi di provider ed è possibile aggiungere un paio di operatori per consentire il confronto e calcoli aritmetici con istanze.

Altri suggerimenti

Se possibile, preferirei dividere il tuo esempio in due valori, dove il tuo enum è "Percentuale" e " SquareFeet " e il secondo valore è il quantificatore. Unisci questi in una struttura.

Se il contesto lo consente, potrebbe essere ancora meglio creare due tipi di wrapper "Percentuale" e " SquareFeet " e quindi creare alcuni sovraccarichi dell'operatore, in modo da poter fare cose come " new SquareFeet (500) + new Percent (20); " ed eliminare l'uso di enumerazioni.

Aggiornamento: Il tuo schema di denominazione sarebbe appropriato se i valori fossero termini riconosciuti dal settore, quasi al punto di essere simboli. Ad esempio, è sicuro avere un enum che contiene valori come " ISO9001 " anziché due valori (un enum contenente "ISO" e un int di 9001). Sarebbe anche opportuno avere un enum come di seguito:

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

Se i termini "Percentuale10" e "Sqf500" non sono termini artistici o ben definiti in una specifica, in un dizionario di dati, ecc. quindi non è appropriato usarli come valori in un enum.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top