他们所谓的 BO 似乎是一种商业服务。DAO 的工作是包含与持久性相关的代码:插入、更新、查询数据库。
服务划分事务,包含业务逻辑,并且通常使用一个或多个 DAO 来实现此逻辑。对于某些用例,服务只是委托给 DAO。对于其他人,它调用一个或多个 DAO 的多个方法。
经典的例子是汇款服务:
public void transferMoney(Long sourceAccountId, Long targetAccountId, BigDecimal amount) {
Account source = accountDAO.getById(sourceAccountId);
Account target = accountDAO.getById(targetAccountId);
if (source.getBalance().compareTo(amount) < 0) {
throw new NotEnoughMoneyException();
}
source.decrementBalance(amount);
target.incrementBalance(amount);
auditDAO.insertTransaction(sourceAccountId, targetAccountId, amount);
// other business logic
}