1

このような状況に遭遇したことはありますか?もしそうなら、どのように解決しましたか?

次のような複数の進行段階を経た記録があります。

提出->予備評価->最終レビュー-> アクティブ

これらの主要なステータスタイプの進行順序は保証されています。ただし、物事をかなり複雑にする要因があります。

  • これらの状態の一部では、レコードが次の状態に移行する前に、いくつかの追加条件が満たされる必要がある場合があります。これらの条件または「サブステート」の一部はオプションであり、一部は必須である場合があります。または、「3つの可能な条件のうちの任意の2つ」の基準を満たす必要がある場合があります。これらのサブ状態またはサブ条件は、任意の順序で満たすことができます。

  • プロセスは動的に変更でき、グループごとに異なります。つまり、システムには複数のグループが存在し、各グループのユーザーは、プロセスに関与する状態とサブ条件を指定できます(一部のグループでは、一部の状態とサブ条件がスキップされる場合があります)。それを容易にするために、何らかの方法でプロセスをデータベースに保存する必要があります。

さて、これはかなり複雑な基準のセットであることがわかっているので、多くのフィードバックは期待していません。しかし、実装を支援するために、公開されているデザインパターン、テクニック、またはアプローチがあるかどうか疑問に思っています。これはエレガントな方法で。同僚と私は何時間もかけて最善の解決策を考え出しましたが、それでも現在の解決策はあまりにも醜いように感じます。

さらに明確にしたい場合は、コメントを追加してください。説明するのはかなり難しい問題なので、十分に明確でなくても驚かないでしょう。ありがとう!

4

1 に答える 1

1

あなたは考えるかもしれません

Modelling Office Processes with Functional Parsers
Technical report UU-CS-1994-50
Gert Florijn
Utrecht University
[http://www.serc.nl/people/florijn/papers/UU-CS-1994-50.html][1]

ここにスニペットがあります:

3.2. 最初の例: 経費精算

旅費の払い戻しの手続きを検討してください。これは、旅行の詳細、特に使用した金額を指定する必要があるユーザーによって開始されます。この仕様はユーザーのマネージャーに送信されます。マネージャーは払い戻しを承認する必要がありますが、拒否することもできます。承認が得られれば、管理者は従業員にお金を振り込みます。この手順のトップレベルを次のようにモデル化できます。

expenseclaim  = arec "expenseclaim" 
            (serie [expenseform, inspect, oneof [reimbursed, refused]])
reimbursed    = arec "reimbursed"  (serie [approved, reimbursement])

経費フォームに記入するということは、いくつかの情報を提供することを意味し、さらに個人情報と、経費が発生したプロジェクト、関連する旅費の額、会議出席料、およびその他の費用など、請求自体に関する情報に分類されます。 :

expenseform = arec "expenseform" (serie [personal, claim])
personal    = arec "personal" (serie [requester,department,bankaccount])
claim       = arec "claim" (serie [project,travel,conference,other])

の他のパーサーは、基本的なアクション パーサーとしてモデル化されています。つまり、

inspect     = actl "inspect"        approved    = actl "approved"
refused     = actl "refused"        requester   = actl "requester"
department  = actl "department"     bankaccount = actl "bankaccount"
project     = actl "project"        travel      = actl "travel"
conference  = actl "conference"     other       = actl "other"
reimbursement = actl "reimbursement"
于 2010-03-02T08:59:13.550 に答える