我是Spring引导和创建没有UI的RESTful API的新手。
我正在考虑是应该使用业务服务并从那里调用存储库,还是直接从我的REST控制器调用它的存储库?
简单应用程序可以跳过服务层。实际上,没有什么可以阻止您从控制器层调用存储库方法。
但是,我强烈建议使用服务层,因为它主要是为了定义应用程序边界。服务层的职责包括(但不限于):
引用马丁·福勒的Service Layer pattern:
服务层从连接客户端层的角度定义了应用程序的边界及其可用操作集。它封装了应用程序的业务逻辑,在其操作的实现中控制交易和协调响应。
关注点分离是关键:
业务逻辑可能从一开始就很简单,并且提供的CRUD操作不多,但这并不意味着它将永远保持这种状态。一旦您需要处理访问权限,就不再是将请求从控制器直接路由到存储库的问题,而是检查访问和过滤数据的问题。在访问数据库之前,可能需要对请求进行验证和一致性检查,并且可能会应用规则和其他操作,因此您的[[服务会随着时间的推移获得更多价值]]即使对于简单的CRUD案例,我都会引入一个服务层,该服务层至少从DTO转换为Entities,反之亦然。
使您的控制器/存储库(或端口和适配器)保持愚蠢,并使您的服务更智能,您将获得可维护且可测试的解决方案。