【发布时间】:2019-02-22 22:36:07
【问题描述】:
我正在构建一个使用工作流的网站。基本上,工作流可以包含任务以及工作流中发生的所有事情的历史记录。当有人通过 UI 将任务分配给其他人时,必须发生两件事:
- 必须将任务分配给新的受让人
- 必须创建工作流历史记录条目
为此,我有一个“TaskController”Web API 和一个“Assign”路由,该路由需要任务 ID 和新的受理人用户名。
现在,我不知道该怎么做。事实上,我有一个“TaskService”,我可以在其中添加一个“Assign”方法,但我不确定这个方法应该做什么。我确定它需要分配任务,但是工作流历史的创建呢?对我来说,这样做是“WorkflowService”的责任。此外,可能在某些情况下我不想创建历史记录,但是当我使用“TaskService”时,它总是会这样做(除非我在方法中添加了“createHistory”参数但我没有不想那样做)。
我想到的另一个解决方案是在 Web API 路由中调用这些不同的服务。像这样的东西(在伪代码中):
_taskService.AssignTask(...);
_workflowService.CreateHistory(...);
这似乎是一个更好的解决方案,但问题是这两个方法写入数据库,所以我应该使用事务:
using (_dbContext.Transaction) {
_taskService.AssignTask(...);
_workflowService.CreateHistory(...);
}
这可行,但我觉得 Web API 路由有很多逻辑......
我在 Google 上搜索了一段时间,但没有找到任何可以帮助我做出决定的东西。对我来说,服务应该只执行特定的操作,因此“TaskService”不应该添加工作流历史记录条目。但是,Web API 路由中不应包含大逻辑(因此,它不应创建事务)。
有没有人知道一种模式或什么可以帮助我解决这个问题?
【问题讨论】:
标签: asp.net-core entity-framework-core asp.net-core-webapi