DAO&BO(数据访问层) - 架构

duc*_*cin 15 java database dao layer

我对网上发现的一个例子有点困惑 - spring和hibernate(指向4. Model & BO & DAO).有Model,DAO和BO类(+ DAO和BO接口).我不清楚的是,如果DAO和BO分享完全相同的功能,那么为什么DAO和BO被分成不同的类(唯一不同的是BO有一个DAO设置器).

作者只解释了这种模式:

有助于清楚地识别图层,以避免弄乱项目结构

但它似乎过度设计了我(至少在这种情况下).我知道这个例子很简单,但是这个类的分离对什么有用呢?有人能提供一个例子吗?

JB *_*zet 31

他们所谓的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
}
Run Code Online (Sandbox Code Playgroud)