私が構築するソフトウェアには、さまざまなステータス間で切り替わる「アプリケーション」が含まれます。特定のタスクは、アプリケーションの状態によって異なります。私はステータスとしてルックアップテーブルとルックアップテーブルと列挙型のリフレクションと状態パターン
public class Application
{
public int Id {get;set;}
public Status {get;set;}
}
public enum Status
{
[Description("New")]New = 1, [Description("Closed")]Closed = 2
}
を列挙型を使用して考えていた。しかし、私は多分それはステータスが更新/再発注かなり頻繁に
table status (id int pk, desc string, sort_order int)
table application (id int pk, status_id int fk)
を取得しないように、データベース内のルックアップテーブルを使用するために良いことだと思った私場合と同じようにする必要があります
if (application.Status == Status.New)
{ //do something }
else if (application.Status == Status.Closed)
{ //do other things }
私は上記のような場合はenumで行うのが簡単だと思います。しかし、ステータスのソート順や説明を更新する場合、かなり難しいでしょう。
ルックアップテーブルの値に基づいて列挙型を動的に作成する必要がありますか?または私は状態パターンを使用する必要がありますか? enum relfectionで見られる問題はパフォーマンスに影響します。そして状態パターンは、多くの冗長コードを生成することがあります。
あなたはどう思いますか?前もって感謝します!
データベースにアプリケーションの状態を保存する列挙またはルックアップテーブルのいずれかが必要として、私はエレガントな解決策 としてこれを見ない
私は答え3で言及したようにelse文がなければ、ビット? – Jeff
私は問題を理解するのに苦労していると思います。 Statusオブジェクトには、必要な場合には有線キャストを含め、必要なコードを含めることができます。 Applicationオブジェクトは同じままです。内部状態と異なる呼び出しをディスパッチします。 –
私の問題は、あなたの例では、正しい状態のオブジェクトにキャストデータテーブルを戻すときにelse文が書き込まれないようにする方法です。else行を付けずにStatusZeroまたはStatusOneにデータ行を戻す方法を教えてください。 – Jeff