2013-02-17 43 views
14

我對在網上找到的示例 - spring & hibernate(點4. Model & BO & DAO)有點困惑。有Model,DAO和BO類(+ DAO和BO接口)。我不清楚的是,爲什麼DAO和BO被分成不同的類,如果它們具有完全相同的功能(唯一的區別是BO有一個DAO設置器)。DAO&BO(數據訪問層) - 體系結構

筆者只解釋說,該模式:

是清楚地識別層有效避免陷入困境的項目結構

但似乎過度設計對我來說(至少在這種情況下)。我知道這個例子非常簡單,但是這個類的分離可能會有用嗎?有人可以提供一個例子嗎?

+1

我imange一個人的BO會_hold_數據,而一個人的DAO將_retrieve_數據。 – 2013-02-17 17:16:35

+1

如果DAO沒有分開,BO(服務)很難重用DAO。還有其他的好處,比如如果你改變底層DB或者ORM框架,BOs reamin不會受到影響,因爲只有DAO的實現部分需要改變。 – techuser 2013-02-17 18:13:08

回答

26

他們稱之爲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 
} 
+0

非常好的例子,謝謝。 – ducin 2013-02-17 17:27:01