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

2022-09-02 12:32:05

我对在网络上找到的一个例子有点困惑 - 春天和冬眠(点)。有模型,DAO和BO类(+ DAO和BO接口)。我不清楚的是,如果 DAO 和 BO 共享完全相同的功能,为什么它们会被分成不同的类(唯一的区别是 BO 有一个 DAO setter)。4. Model & BO & DAO

作者只解释了该模式:

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

但对我来说,它似乎被过度设计了(至少在这种情况下)。我知道这个例子很简单,但是这个类分离有什么用呢?有人可以举个例子吗?


答案 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
}

答案 2

推荐