首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务呼叫服务

服务呼叫服务
EN

Software Engineering用户
提问于 2020-01-11 20:29:04
回答 1查看 361关注 0票数 -1

我正在开发的应用程序有:

  • 控制器(它们负责处理RESTful API调用),
  • 服务(它们的方法由控制器调用,它们负责各种对象的操作),
  • 存储库(它们的方法是由控制器在操作各种对象时使用)
  • 诸若此类。

有些操作是异步的,因此控制器通过调用单独的服务来运行此操作,而此单独的服务将启动后台作业并将作业ID返回给调用者。看起来是这样:

代码语言:javascript
复制
    @DeleteMapping("/hahaha/{id}")
    public Job deleteHahaha(@PathVariable("id") String id) {
        return jobService.runJob(
                () -> {
                    hahahaService.delete(id);
                }
        );
    }

一切正常,但我不确定每件事都是最佳的。

我不应该让HahahaService.delete()自己调用JobService.runjob()并返回一个Job吗?如果服务是耦合和相互依赖的,这难道不是一种糟糕的做法吗?同时,JobService是一种不同于HahahaServiceHohohoServiceKekekeService的服务,因为它是一种辅助服务,所以从另一种服务中使用它是可以的。

你认为如何?

谢谢!

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-01-11 21:06:16

我不应该让HahahaService.delete()自己调用JobService.runjob()并返回一个Job吗?

区分域服务(比如包含实际业务逻辑的HahahaService )和基础设施服务(比如处理调度、线程池等的JobService )非常重要。您不希望域层了解基础设施,因为域逻辑可以跨不同的应用程序重用,这可能需要不同类型的基础结构。

使用控制器调用JobService的示例是正确的方法,因为控制器有责任知道它正在为异步REST端点服务并安排后台作业。

如果您希望在将来构建一个命令行接口,您可以重用HahahaService,但是删除操作可能是同步的,根本不需要JobService

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/403686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档