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 に答える