gpt4 book ai didi

java - 创建一个transactionService类可以吗

转载 作者:行者123 更新时间:2023-12-01 18:17:21 24 4
gpt4 key购买 nike

我的代码中有一些原子操作。从书本上看,这将是一个类例子。您从一个用户处取款是第一次数据库访问。然后你把这笔钱交给另一个用户,这将是第二次数据库访问操作。只有两者一起执行才能执行。如果第一个成功而第二个失败,则整个操作必须回滚。

所以在我的应用程序中我也有这个。也许这永远不会发生,但要确保我把它变成了一笔交易。例如。用户保存其假期。而且假期本身也保存在另一个表中。

这是我的代码。我决定将所有交易都放在这个类中。我称之为交易服务。我希望一切都好。当我收到一条错误消息时,我有点困惑,我的应用程序中有 2 个事务管理器。我刚刚决定使用名为 transactionManager 的一个。

@Service
public class TransactionService {

private UserDao userDao;
private HolidayDao holidayDao;
private WorkingMonthDao workingMonthDao;

@Autowired
public TransactionService(UserDao userDao,HolidayDao holidayDao,WorkingMonthDao workingMonthDao)
{
this.userDao = userDao;
this.holidayDao = holidayDao;
this.workingMonthDao = workingMonthDao;
}

//@Transactional(isolation=Isolation.READ_COMMITTED, propagation=Propagation.REQUIRED,readOnly=false,timeout=1000, rollbackFor=Exception.class)
@Transactional(value="transactionManager")
public void saveUserAndHoliday(User user, Holiday holiday)
{
userDao.save(user);
holidayDao.save(holiday);
}

@Transactional(value="transactionManager")
public void saveUserAndDeleteHoliday(User user, Holiday holiday)
{
holidayDao.delete(holiday);
userDao.save(user);
}

@Transactional(value="transactionManager")
public void saveUserAndWorkingMonth(User user, WorkingMonth workingMonth)
{
userDao.save(user);
workingMonthDao.save(workingMonth);
}
}

最佳答案

我会给这样的服务起另一个名字,可能会根据业务逻辑域将其分成几个类。假设您坚持干净代码原则并希望构建低耦合应用程序,将来可以轻松支持。据说交易属于cross-cutting concern应用程序架构。这意味着事务相关的类不应包含应用程序核心逻辑。此类的示例可以是自定义事务管理器。所有方法 saveUserAndHolidaysaveUserAndDeleteHolidaysaveUserAndWorkingMonth 都负责业务逻辑的一部分,尽管只是一小部分 - 组合不同的 DAO。在我的实践中,我们通常将此类类称为 Repositories - 服务(核心业务逻辑层)和 DAO(持久层)之间的中间层。

关于java - 创建一个transactionService类可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343907/

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