使业务代码可读,数据库枚举

时间:2009-07-28 16:56:59

标签: enums business-logic

假设我有一个这样的枚举表:

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” 部分可读。 当下一个人来维护这段代码时,他必须找到生产数据库,并查询每个业务规则的表格,以了解他们的工作。

我认为只是在代码中创建枚举只是复制数据库中的数据,但这似乎也不是一个好的解决方案。

2 个答案:

答案 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之类的东西创建)。