複雑なシナリオを聞く必要があるので、例を挙げて説明します。
次のモデルを検討してください。
public enum States { Created, Approved, Started, Completed }
public class Request {
States State {get; set;}
IEnumerable<RequestLine> Lines {get; set;}
}
public class RequestLine {
States State {get; set;}
Request Request {get; set;}
IEnumerable<WorkOrder> WorkOrders {get; set;}
}
public class WorkOrder {
States State {get; set;}
RequestLine RequestLine {get; set;}
IEnumerable<WorkOrderAction> Actions {get; set;}
}
public class WorkOrderAction {
States State {get; set;}
WorkOrder WorkOrder {get; set;}
}
つまり、すべてのレコードには状態があり、それらはすべて接続されています。WorkOrderActionが作成されたら、WorkOrder状態、RequesTLine状態、Request状態の順に更新する必要があります。すべてのWorkOrderActionレコードについて、他の子レコードの状態を確認し、親レコードを更新する必要があります。
これは、データベーストリガーを使用して行うことができますが、これは好ましくありません。私はアプリケーションレベルでDevexpressXAFを使用しているので、そこでいくつかのロジックをコーディングすることもできます。しかし、それでも私はどちらのアプローチが良いかを決めることができません。
リンクされたステートマシンに共通の概念はありますか?