他們稱之爲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
}
我imange一個人的BO會_hold_數據,而一個人的DAO將_retrieve_數據。 – 2013-02-17 17:16:35
如果DAO沒有分開,BO(服務)很難重用DAO。還有其他的好處,比如如果你改變底層DB或者ORM框架,BOs reamin不會受到影響,因爲只有DAO的實現部分需要改變。 – techuser 2013-02-17 18:13:08