Supongo que esta es otra pregunta sobre la codificación rígida y las mejores prácticas. Digamos que tengo una lista de valores, digamos fruta, almacenados en la base de datos (debe estar en la base de datos ya que la tabla se usa para otros fines, como los informes SSRS), con una ID:
1 Apple
2 Banana
3 Grapes
Puedo presentarlos al usuario, selecciona uno, se almacena en su perfil como FavouriteFruit y la ID almacenada en su registro en la base de datos.
Cuando se trata de reglas de negocio / lógica de dominio, ¿cuáles son las recomendaciones para asignar lógica a valores específicos? Digamos que si el usuario ha seleccionado Grapes, deseo realizar alguna tarea adicional, ¿cuál es la mejor manera de hacer referencia al valor de 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)
¿o algo mas?
Como, por supuesto, FavouriteFruit se utilizará en toda la aplicación, la lista se puede agregar o editar.
Alguien puede decidir que quiere que 'Grapes' cambie su nombre a 'Grape' y, por supuesto, esto rompería la opción de cadena codificada.
Sin embargo, la ID codificada no está completamente clara, como se muestra, podría agregar un comentario para identificar rápidamente qué elemento es.
La opción enum implica la duplicación de datos de la base de datos, lo que parece incorrecto, ya que puede no estar sincronizado.
De todos modos, gracias de antemano por cualquier comentario o sugerencia.
MyApplication.Grape.IDtartamudea, por así decirlo. Una "Apple" no es una "Red_Apple", como tampoco el ID de 3 es 4. Por lo tanto, el potencial para cambiar el nombre de "Apple" a "Red_Apple" no tiene más sentido que declarar que 3 es 4 (y tal vez incluso 3). El objetivo de una enumeración es abstraer su ADN numérico. Entonces, tal vez es hora de desacoplar realmente las claves de base de datos relacionales arbitrarias que literalmente no tienen significado en los modelos de negocio de uno.