我是Spring Boot的新手,正在创建一个没有UI的RESTful API。
我在考虑是否应该使用业务服务并从那里调用存储库,还是直接从我的REST控制器中调用存储库?
我是Spring Boot的新手,正在创建一个没有UI的RESTful API。
我在考虑是否应该使用业务服务并从那里调用存储库,还是直接从我的REST控制器中调用存储库?
关注点分离是关键:
业务逻辑在开始时可能很简单,只提供简单的CRUD操作,但这并不意味着它将永远保持这种状态。一旦您需要处理访问权限,就不再是直接将请求从控制器路由到存储库,而是需要检查访问权限和过滤数据。请求可能需要在访问数据库之前进行验证和一致性检查,还可以应用规则和其他操作,因此您的服务随着时间的推移变得更有价值。
即使对于简单的CRUD案例,我也会引入一个服务层,至少将DTO转换为实体,反之亦然。
让您的控制器/存储库(或端口和适配器)保持愚蠢,让您的服务聪明,您将获得可维护且易于测试的解决方案。
服务层并非Spring Boot独有的概念,它是一个软件架构术语,常被称为模式。简单的应用程序可以省略服务层。在实践中,您可以从控制器层调用存储库方法。
但是,我强烈建议使用服务层,因为它主要用于定义应用程序边界。服务层的职责包括(但不限于):
引用Martin Fowler的服务层模式,摘自《企业应用架构模式目录》:
服务层定义了一个应用程序的边界及其可用操作集,从接口客户端层的角度来看。它封装了应用程序的业务逻辑,在实现其操作时控制事务并协调响应。