2011-01-14 3 views
2

問題トラッカーのようなものに最も近いデザインパターンは何ですか?トラッキング/ステータス用のデザインパターン

さまざまなステータスのオブジェクト(open,closedin production)があります。

アクションは、現在のステータスに基づいて実行できます。アクションをグループ化し、ステータスにグループを割り当てられる可能性があることで

class Status 
    - next_status (None or Status) 
    - previous_status (None or Status) 
    - actions (set of Actions) 

class Action 
    - name (string) 
    - description (string) 

私の最初のモデルは少しこのようになります。ほとんどのアクセス許可モデルと同様に、あなたは言うことができます。

このパターンの入力方法を探していたので、もう少し調べてみましょう。ありがとう!

答えて

3

あなたはfinite state machine(FSM)を表すしているの組み合わせを考えていますが、あなたのクラスのデザインはdoubly-linked listのように見えます。ステータスが前後のステータスを決定する場合、これは実行可能ですが、ほとんどのシステムでこれは真実ではありません。あなたの例で「オープン」のステータスを考えてください。次は「閉鎖」または「生産中」の可能性がありますか?

両方のステータスは、可能性がある場合は、あなたのクラス階層にオブジェクト(アクションを置き換えるおそらくか?)Statusオブジェクトを変更し、トランジションを追加することを検討:開かれた「

class Status 
    - transitions (Transition[]) 

class Transition 
    - from (Status) 
    - to (Status) 

ここでステータスが遷移が可能であるかを知っている(例えば「閉鎖」または「生産中」に移行する可能性があります)。このようにしてFSMをdirected graphと表します。また、私自身の経験では、エンティティにちょうどそれがどこから来たのかを知ることは重要ではないので、prior_statusの削除。その代わりに、監査ロギング/データベーステーブルのキャプチャ履歴を通じてパスをキャプチャできます。

+0

これは私が望むように見えます。私は既にトランジションをログに記録しています。ありがとう! –

関連する問題