假设我有一个这样的枚举表:
id name desc
0 Normal Normal shipping
1 Fragile Fragile, handle with care
我在订单上得到了一些商业规则
double ShippingPrice(Product p)
{
if (p.ShippingType == 1) // Fragile
return GetFragileShippingPrice(p);
else
return GetNormalShippingPrice(p);
}
也许不是最好的例子。但关键是,你如何制作“p.ShippingType == 1” 部分可读。 当下一个人来维护这段代码时,他必须找到生产数据库,并查询每个业务规则的表格,以了解他们的工作。
我认为只是在代码中创建枚举只是复制数据库中的数据,但这似乎也不是一个好的解决方案。
答案 0 :(得分:1)
除了手动编辑枚举或使用代码生成创建枚举外,我认为你不会得到任何其他东西。您可以使用t4模板创建它,您可以从中获取数据库中的信息,或者其他一些生成方式。
在任何一种情况下,您都希望在编译时可以使用它们以确保类型安全和易用性。当然你可以像bnkdev的帖子那样冗长的讨论链接创建动态枚举,但是如果你想一下如何使用它们,那么你就可以使用常量,这样就可以达到目的。
答案 1 :(得分: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);
}
然后你将从数据库中的表中自动生成枚举(由CodeSmith之类的东西创建)。