Мне нужно задать сложный сценарий, поэтому я попытаюсь объяснить на примере.
Рассмотрим следующую модель:
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, а затем состояние запроса. Для каждой записи WorkOrderAction я должен проверить состояние других дочерних записей и обновить родительскую запись.
Я могу сделать это с помощью триггеров базы данных, которые я не предпочитаю. Я использую Devexpress XAF на уровне приложений, поэтому я также могу написать некоторую логику. Но все же я не могу решить, какой подход лучше.
Существует ли общая концепция для связанных конечных автоматов?