2009-07-28 3 views
1

permet de dire que je suis une table enum comme ceci:Making code métier lisible, base de données énumérations

id name desc 
0 Normal Normal shipping 
1 Fragile Fragile, handle with care 

et je suis une règle d'affaires sur une commande

double ShippingPrice(Product p) 
{ 
    if (p.ShippingType == 1) // Fragile 
    return GetFragileShippingPrice(p); 
    else 
    return GetNormalShippingPrice(p); 
} 

Peut-être pas le meilleur exemple. Mais le point est, comment faites-vous le "p.ShippingType == 1" partie lisible. Lorsque la personne suivante vient pour gérer ce code, il doit trouver la base de données de production et les tables de requêtes pour chaque règle métier afin de comprendre ce qu'elles font.

J'ai considéré que la simple création d'une énumération dans le code ne faisait que dupliquer les données dans la base de données, mais cela ne semble pas non plus une bonne solution.

Répondre

0
enum ShippingType : int 
{ 
    Normal = 0, 
    Fragile = 1 
} 

double ShippingPrice(Product p) 
{ 
    if (p.ShippingType == ShippingType.Fragile) // Fragile 
    return GetFragileShippingPrice(p); 
    else 
    return GetNormalShippingPrice(p); 
} 

Ensuite, vous avez généré automatiquement ENUM (créé par quelque chose comme CodeSmith) à partir d'une table dans votre base de données.

1

Je ne pense pas que vous fassiez autre chose que modifier manuellement votre énumération ou la créer en utilisant la génération de code. Vous pouvez le créer à l'aide de modèles t4, d'où vous pouvez extraire les informations de votre base de données ou d'autres moyens de génération.

Dans les deux cas, vous voudriez vraiment les avoir à la compilation pour la sécurité et la facilité d'utilisation. Bien sûr, vous pouvez créer des énumérations dynamiques comme dans le long lien de discussion de la publication de bnkdev, mais si vous pensez à la façon dont ils seraient utilisés, vous seriez aussi bien avec une constante, ce qui irait à l'encontre du but.

Questions connexes