1

可以说我有一个这样的枚举表:

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

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

4

2 回答 2

1

除了手动编辑枚举或使用代码生成来创建枚举之外,我认为您不会逃脱任何惩罚。您可以使用 t4 模板创建它,从那里您可以从数据库中获取信息,或者其他一些生成方式。

无论哪种情况,您都希望它们在编译时可用,以确保类型安全和易于使用。当然,您可以像 bnkdev 帖子中冗长的讨论链接中那样创建动态枚举,但是如果您考虑如何使用它们,那么您将与常量一样好,这会破坏目的。

于 2009-09-10T12:08:44.057 回答
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 之类的东西创建)。

于 2009-07-28T16:58:57.030 回答