2013-02-17 12 views
14

Jestem nieco zdezorientowany na przykład znaleziony w Internecie - spring & hibernate (punkt 4. Model & BO & DAO). Istnieją klasy Model, DAO i BO (+ interfejsy DAO i BO). To, czego nie rozumiem, to dlaczego DAO i BO są podzielone na różne klasy, jeśli mają dokładnie te same funkcje (tylko różnica polega na tym, że BO ma ustawnik DAO).DAO & BO (warstwa dostępu do danych) - architektura

Autor wyjaśnia jedynie, że wzór:

jest przydatna do identyfikacji warstwy wyraźnie uniknąć bałagan strukturę projektu

ale wydaje ponad zaprojektowane do mnie (co najmniej w tym przypadku). Wiem, że ten przykład jest bardzo prosty, ale do czego mogłaby się przydać ta separacja klas? Czy ktoś może podać przykład?

+1

I imange czyjeś BOS będzie _wstrzymany_ dane natomiast czyjeś DAOs byłoby _retrieve_ danych. –

+1

Jeśli DAO nie byłyby rozdzielone, byłoby bardzo trudno dla BO (usług) ponownie użyć DAO. Są też inne zalety, np. Jeśli zmienisz bazową architekturę DB lub ORM, repozytorium BO pozostanie nienaruszone, ponieważ zmieni się tylko część implementacyjna potrzeb DAO. – techuser

Odpowiedz

26

To, co nazywają BO, wydaje się być usługą biznesową. Zadaniem DAO jest zawarcie kodu związanego z utrwalaniem: wstawianie, aktualizowanie, odpytywanie bazy danych.

Usługi wyznaczają transakcje, zawierają logikę biznesową i zwykle używają jednego lub kilku DAO do wdrożenia tej logiki. W niektórych przypadkach usługa deleguje tylko do DAO. Dla innych wywołuje kilka metod jednego lub kilku DAO.

Klasycznym przykładem jest transfer pieniędzy:

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

Bardzo dobry przykład, dziękuję. – ducin

Powiązane problemy