gpt4 book ai didi

java - 服务方法参数、对象标识符与对象引用

转载 作者:行者123 更新时间:2023-12-02 08:41:34 26 4
gpt4 key购买 nike

我知道将对象传递到服务方法中可能会更好,但是如果调用者在调用服务之前首先必须查找对象,情况仍然如此吗?如果是这样,为什么?

示例

假设我有一个 RoleService,它向给定用户添加一个角色。假设 RoleService 是通过 Web Controller 或可能是 REST API 调用的。 Web Controller 将 userId 和 roleId 作为来自 Web 请求的输入。

使用这种服务方法会更好吗?

public void addRoleToUser(long userId, long roleId) {
User user = userRepository.find(userId);
Role role = userRepository.find(roleId);
user.addRole(role);
}

还是这个?在这种情况下,Web Controller 显然需要在调用服务之前检索这两个对象。

public void addRoleToUser(User user, Role role) {
user.addRole(role);
userRepository.save(user);
}

最佳答案

无论是通过网络 Controller 还是 REST API 调用,传入请求都只会提供 2 个 ID,因此您必须在某处执行 find() 调用。

您当然不能相信调用者拥有有关这两个对象的最新信息,如果您只想使用 ID,则传输完整对象是一种浪费。

服务 API 也是数据库事务边界(使用 @Transactional 注释的服务类或方法)是很常见的,因此最好让服务方法执行 find ()addRole() 调用,因此它们都在单个数据库事务中执行。

关于java - 服务方法参数、对象标识符与对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61356195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com