Ответ 1
То, что они называют 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
}