Je suppose que ceci est une autre question sur le codage dur et les meilleures pratiques. Supposons que j'ai une liste de valeurs, disons fruits, stockées dans la base de données (elle doit figurer dans la base de données car la table est utilisée à d'autres fins, telles que les rapports SSRS), avec un ID:
1 Apple
2 Banana
3 Grapes
Je peux les présenter à l'utilisateur, il en sélectionne un, il est stocké dans son profil sous le nom FavouriteFruit et l'identifiant stocké dans son enregistrement dans la base de données.
En ce qui concerne la logique des règles métier / domaine, quelles sont les recommandations pour attribuer une logique à des valeurs spécifiques. Si l'utilisateur a sélectionné Grapes, je souhaite effectuer une tâche supplémentaire. Quel est le meilleur moyen de référencer la valeur 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 autre chose?
Bien sûr, le FavouriteFruit sera utilisé dans toute l'application, la liste peut être ajoutée ou modifiée.
Quelqu'un peut décider qu'il veut renommer 'Grapes' en 'Grape', ce qui casse l'option de chaîne codée en dur.
L'ID codé en dur n'est pas tout à fait clair, cependant, comme indiqué, vous pouvez simplement ajouter un commentaire pour identifier rapidement l'élément.
L'option enum implique la duplication de données de la base de données, ce qui semble faux, car elles risquent de ne pas être synchronisées.
Quoi qu'il en soit, merci d'avance pour vos commentaires ou suggestions.
MyApplication.Grape.ID
est le bégaiement, pour ainsi dire. Un "Apple" n'est pas un "Red_Apple", pas plus qu'un ID de 3, c'est aussi 4. Donc, le potentiel de renommer "Apple" en "Red_Apple" n'a pas plus de sens que de déclarer que 3 est 4 (et peut-être même 3). Le but d'une énumération est d'extraire son ADN numérique. Alors peut-être qu'il est temps de vraiment dissocier les clés de base de données relationnelles arbitraires qui n'ont littéralement aucune signification dans les modèles commerciaux.