A implementação de Enums Fortemente Tipados não é apenas uma questão de funcionalidade básica, como criar um Dictionary
. A escolha pelo padrão que apresentei no artigo tem motivos claros que vão além de uma simples estrutura chave-valor. Vamos analisar e defender os principais pontos:
1. Semântica e Intenção
Um Dictionary
é uma estrutura genérica de chave-valor, enquanto um Enum Fortemente Tipado fornece semântica clara. No exemplo do artigo, você não apenas define chaves e valores, mas encapsula comportamento e identidade, promovendo o uso de objetos ricos.
-
No caso do Dictionary:
CreditCardDiscount["Standard"]
Aqui, não há segurança de tipo. Se alguém digitar uma chave incorreta (e.g.,
"Stndard"
), haverá um erro de runtime. -
No caso do Enum Fortemente Tipado:
CreditCardType.Standard.Discount
Aqui, tanto a chave quanto o valor são validados em tempo de compilação, o que reduz drasticamente erros e torna o código mais expressivo.
2. Manutenção e Extensibilidade
Um Dictionary
funciona bem para mapeamentos simples, mas torna-se limitado quando o modelo evolui. Por exemplo, se o CreditCard
passar a ter outras propriedades além do desconto, como uma descrição ou prioridade:
-
No Dictionary:
A abordagem ficaria mais complexa e menos legível, exigindo estruturas auxiliares ou novos mapeamentos:var CreditCardDetails = new Dictionary<string, (double Discount, string Description)>{ { "Standard", (0.01, "Basic card") }, { "Premium", (0.05, "Intermediate card") }, { "Platinum", (0.1, "Top-tier card") } };
-
No Enum Fortemente Tipado:
Adicionar comportamentos ou propriedades ao tipo é direto:public class CreditCardType { public static readonly CreditCardType Standard = new("Standard", 0.01, "Basic card"); public static readonly CreditCardType Premium = new("Premium", 0.05, "Intermediate card"); public static readonly CreditCardType Platinum = new("Platinum", 0.1, "Top-tier card"); public string Name { get; } public double Discount { get; } public string Description { get; } private CreditCardType(string name, double discount, string description) { Name = name; Discount = discount; Description = description; } }
Isso mantém o código coeso e organizado.
3. Segurança de Tipo
Ao utilizar um Dictionary
, você depende de strings para as chaves, o que é suscetível a erros. Com Enums Fortemente Tipados, o tipo é explícito, o que impede uso incorreto ou ambíguo:
-
Com Dictionary:
var discount = CreditCardDiscount["Stanndard"]; // Erro de runtime
-
Com Enum Fortemente Tipado:
var discount = CreditCardType.Standard.Discount; // Seguro e validado em compile-time
4. Carga e Desempenho
Você mencionou no seu comentário "uma carga enorme". No entanto, a estrutura apresentada no artigo cria objetos imutáveis e reutilizáveis. Não há impacto significativo de desempenho, pois o modelo usa o padrão Singleton e evita reprocessamento.
Já o Dictionary
carrega overheads adicionais de hashing e buscas dinâmicas, o que pode ser evitado na abordagem proposta.
5. Legibilidade e Organização
A proposta de um Dictionary
resulta em menos legibilidade quando se trata de conceitos de domínio. A abordagem apresentada no artigo organiza os dados de forma mais explícita e mantém o contexto do domínio em uma única classe.
- Um Enum Fortemente Tipado é autocontido e reflete melhor as intenções do código.
Ambas as abordagens têm méritos, mas a escolha por Enums Fortemente Tipados vai além de mapear valores: trata-se de melhorar a expressividade, a segurança de tipo, e a extensibilidade do sistema. Em um sistema que evolui, o custo inicial de implementação é compensado por um código mais robusto, organizado e seguro.