Acho que essa é outra pergunta sobre codificação embutida e práticas recomendadas. Digamos que eu tenha uma lista de valores, digamos frutas, armazenados no banco de dados (ele precisa estar no banco de dados, pois a tabela é usada para outros fins, como relatórios do SSRS), com um ID:
1 Apple
2 Banana
3 Grapes
Eu posso apresentá-los ao usuário, ele seleciona um, ele é armazenado em seu perfil como FavouriteFruit e o ID armazenado em seu registro no banco de dados.
Quando se trata de regras de negócios / lógica de domínio, quais são as recomendações para atribuir lógica a valores específicos. Digamos que se o usuário selecionou o Grapes, quero executar alguma tarefa extra, qual é a melhor maneira de referenciar o valor do Grapes:
// Hard coded name
if (user.FavouriteFruit.Name == "Grapes")
// Hard coded ID
if (user.FavoriteFruit.ID == 3) // Grapes
// Duplicate the list of fruits in an enum
if (user.FavouriteFruit.ID == (int)Fruits.Grapes)
ou alguma outra coisa?
Como é claro que o FavouriteFruit será usado em todo o aplicativo, a lista poderá ser adicionada ou editada.
Alguém pode decidir que deseja que 'Grapes' seja renomeado para 'Grape' e isso, obviamente, quebraria a opção de string codificada.
O código codificado não é totalmente claro, porém, como mostrado, você pode adicionar um comentário para identificar rapidamente qual item é.
A opção enum envolve a duplicação de dados do banco de dados, o que parece errado, pois pode ficar fora de sincronia.
De qualquer forma, agradeço antecipadamente por quaisquer comentários ou sugestões.
MyApplication.Grape.ID
é gago, por assim dizer. Uma "Apple" não é uma "Red_Apple", assim como o ID 3 também é 4. Portanto, o potencial de renomear "Apple" para "Red_Apple" não faz mais sentido do que declarar que 3 é 4 (e talvez até 3). O objetivo de um enum é abstrair seu DNA numérico. Talvez seja hora de realmente desacoplar chaves de banco de dados relacionais arbitrárias que literalmente não têm significado nos modelos de negócios de alguém.