我正在开发的应用程序有:
有些操作是异步的,因此控制器通过调用单独的服务来运行此操作,而此单独的服务将启动后台作业并将作业ID返回给调用者。看起来是这样:
@DeleteMapping("/hahaha/{id}")
public Job deleteHahaha(@PathVariable("id") String id) {
return jobService.runJob(
() -> {
hahahaService.delete(id);
}
);
}一切正常,但我不确定每件事都是最佳的。
我不应该让HahahaService.delete()自己调用JobService.runjob()并返回一个Job吗?如果服务是耦合和相互依赖的,这难道不是一种糟糕的做法吗?同时,JobService是一种不同于HahahaService、HohohoService和KekekeService的服务,因为它是一种辅助服务,所以从另一种服务中使用它是可以的。
你认为如何?
谢谢!
发布于 2020-01-11 21:06:16
我不应该让
HahahaService.delete()自己调用JobService.runjob()并返回一个Job吗?
区分域服务(比如包含实际业务逻辑的HahahaService )和基础设施服务(比如处理调度、线程池等的JobService )非常重要。您不希望域层了解基础设施,因为域逻辑可以跨不同的应用程序重用,这可能需要不同类型的基础结构。
使用控制器调用JobService的示例是正确的方法,因为控制器有责任知道它正在为异步REST端点服务并安排后台作业。
如果您希望在将来构建一个命令行接口,您可以重用HahahaService,但是删除操作可能是同步的,根本不需要JobService。
https://softwareengineering.stackexchange.com/questions/403686
复制相似问题