Я создаю сайт, который использует рабочие процессы.По сути, рабочий процесс может иметь задачи, а также историю всего, что произошло в рабочем процессе.Когда кто-то назначает задачу кому-либо еще через пользовательский интерфейс, должны произойти две вещи:
- Задача должна быть назначена новому уполномоченному
- Должна быть создана запись истории рабочего процесса
Итак, для этого у меня есть веб-API «TaskController» с маршрутом «Назначить», который ожидает идентификатор задачи и новое имя пользователя для назначенного.
Теперь я не знаюкак именно поступить.Действительно, у меня есть «TaskService», и я мог бы добавить в него метод «Назначить», но я не совсем уверен, что этот метод должен делать.Я уверен, что нужно назначить задачу, но как насчет создания истории рабочего процесса?Для меня это ответственность "WorkflowService", чтобы сделать это.Более того, могут быть случаи, когда я не хочу создавать историю, но, поскольку я использую «TaskService», она всегда будет делать это (за исключением того, что я добавляю в метод параметр «createHistory», но я нея не хочу этого делать).
Другое решение, которое я имею в виду, заключается в том, чтобы вызывать эти разные службы в маршруте Web API.Примерно так (в псевдокоде):
_taskService.AssignTask(...);
_workflowService.CreateHistory(...);
Это кажется лучшим решением, но проблема в том, что эти два метода записывают в базу данных, поэтому я должен использовать транзакцию:
using (_dbContext.Transaction) {
_taskService.AssignTask(...);
_workflowService.CreateHistory(...);
}
Это бы сработало, но я чувствую, что для маршрута Web API много логики ...
Я некоторое время гуглял и не нашел ничего, что помогло бы мне принять решение.Для меня служба должна выполнять только определенные действия, поэтому «TaskService» не должен добавлять запись истории рабочего процесса.Однако в маршруте веб-API не должно быть большой логики (поэтому он не должен создавать транзакцию).
Кто-нибудь знает шаблон или что-то, что могло бы помочь мне в этом?