让我们来考虑一个弹簧引导(春天访问用户的数据)应用程序的控制器和服务,如以下例子:
processEntity()
获取一个对象从数据库和流程/更新。publishEntity()
是一个单独的方法,再次取的对象从数据库,并将其发布到另一个系统。 它需要的"最新的"国家的实体的数据库。
我发现了几个博文和文章,其建议 不要操作实体在控制器,即范围之外的事务。 所以我的课程是这样的:
@Service
public SomeService {
@Transactional
public void processEntity(long id) {
final SomeEntity someEntity = entityRepository.findById(id);
// process entity...
entityRepository.save(someEntity);
}
@Transactional(readOnly = true)
public void publishEntity(long id) {
final SomeEntity someEntity = entityRepository.findById(id);
// publish entity to another system...
}
}
@RestController
public SomeController {
@GetMapping(path = "/api/entity")
public ResponseEntity<Void> getEntity() {
someService.processEntity(1);
someService.publishEntity(1);
}
}
是这种方法合理吗? 或者是有更好的模式为这样使用的情况下? 它会被认为是"不好做法"如果 processEntity
返回该实体本身的控制器,它穿它 publishEntity
?