2012-01-16 4 views
0

私は、リレーショナルデータベース(O/Rマッピング)に格納されたドキュメントを表すオブジェクトを持っています。このドキュメントには、その状態を識別するステータスフィールドがあります。すべてのステータス(すなわち、エントリー、承認待ち、送付済み、支払済など)は、それ自身の検証ルールと要件を持ちます。オブジェクト内でワークフローを実装する方法

私はこのようなワークフローの正しいオブジェクト指向の実装が何であるか疑問に思っています。これを行う最も簡単な方法は、

のようなifステートメントの束を配置することです。(ステータス==何か||ステータス==何か他のもの) 日付を変更できるかどうかを確認します。

複雑なシナリオでは、これは非常に読みにくくなります。

良いデザインのための提案?

+0

あなたのドキュメントのライフサイクルまたはライフサイクルは、いくつかのボタンを有効/無効にするUIレベルに存在するだけでなく、Businee Logicレベルでも知っている必要があります。私はWF(Microsoft Workflow Foundation)を見ていますが、それは設定可能であり、必要なサーバー(さらにはそれ以上)をお勧めします;-) –

答えて

2

Strategy Patternをご覧ください。可能な状態ごとに、実行するステップを実装するクラスを作成します。

DBから読み込んだときの書類の状態に応じて正しい戦略オブジェクトを構築するファクトリと組み合わせたいと思うかもしれません。

+0

ありがとうございました。私はそれを調べます。あなたが既にそれに精通している場合はちょうど質問 - 各状態を表すクラスは、ドキュメントクラスの内部(ネスト)ですか? – Nezreli

+0

私はあなたの具体的な設計について十分な知識がありません。私はそのように実装しません(特に文書があなたの場合のように永続的である場合)。戦略は文書を操作してそれらを修正するべきである –

+0

このアプローチの欠点は、Documentクラスのすべての内部構造が 'State'クラスから隠されていることです。 – Nezreli

1

Windows Workflow Foundationを確認する必要があると思います。これは.NETの一部であり、比較的簡単にワークフローを作成することができます。

+0

なぜリンクは単に1と表示されますか? –

+0

リンクを修正しました:) –

+0

ワークフローは実装されても変更されません。私は実装のための簡単で明確な方法が必要であり、この点ではIMOの新しい技術を導入することはできません。 – Nezreli

関連する問題