Asp.net MVC アプリを作成していますが、設計上の決定がわかりません。enum 値を使用するのが最適な設計なのか、これらの値をルックアップ テーブルとしてデータベースに格納するのが最適なのかはわかりません。これらすべてのクエリが問題にならない Windows アプリではルックアップ テーブルで問題ないと想像できますが、リレーショナル データベースを使用するクラウドで実行されている高トラフィックの Web アプリケーションではよくわかりません。
アプリケーションは保守可能である必要があり、将来的に多言語をサポートする必要があります。他の開発者がシステムで作業する必要があるため、設計が正しく、保守が容易である必要があります。
現在、NotificationMethod (None、Email、Sms)、
Gender (Male、Female)、OrderStatus (Open、Closed、InProgres、DeliveryInProgress PaymentService (Cash、BankTransfer、Paypal、GoogleWallet)などの値に列挙型を使用しています。
列挙型にリンクされたコードにはビジネス ルールがあり、文字列の代わりに列挙型の値を使用するビジネス ルールを使用すると、アプリケーションが読みやすくなり、間違いが起こりにくくなるため、列挙型は私に適しています。
ただし、上記は次のシナリオには適していません。私の Web フロントエンドには、選択/ドロップダウン コントロールがあります。ドロップダウンにデータを入力するために、次のコードがあります
var paymentServices=
Enum.GetValues(typeof(PaymentService))
.Cast<PaymentService >()
.Select(d => new SelectListItem()
{
Text = d.ToString(),
Value = ((int)d).ToString()
}).ToList();
列挙値 Email の代わりに、E-Mail を表示したいのですが、単語間にスペースが必要です。
したがって、属性を使用することになり、ここで説明するように、EnumHelper クラスで静的メソッドを使用して属性を読み取ります
私の注文と好みのデータベーステーブルには、テーブルごとにこれらの列挙型が約 20 あります。
私のシナリオでは、ベストプラクティスは
FriendlyNames、Description、Tooltip などの表示値には、列挙型属性を持つ C# 列挙型のみを使用してください。
データベース ルックアップ テーブルを使用するだけです。欠点は、ルックアップ テーブルにある選択された値の文字列値に基づいてビジネス ルールを作成する必要があることです。好みや注文の編集画面に移動するには、ドロップダウン コントロールを表示するために、データベース内の 20 個のルックアップ テーブルを個別に読み取る必要があります。これにより、コードの作成とレポートの作成がはるかに簡単になりますが、システムには大きな負荷がかかります (システムには何千ものユーザーがいます)。
ビジネス ルールに単純な列挙型の値を設定し、一致するルックアップ データベース テーブルを使用して、フロントエンド UI に表示する追加の表示列をそれらのテーブルに格納します。欠点は、基本的な列挙型の番号付けをデータベース ルックアップ テーブルと同期させなければならないことです。
最良の設計決定をどのように決定しますか、またはより良い解決策はありますか?