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

标签 java database dao layer

我对网上找到的一个例子有点困惑 - spring & hibernate (要点 4.Model & BO & DAO)。有模型、DAO 和 BO 类(+ DAO 和 BO 接口(interface))。我不太清楚的是,如果 DAO 和 BO 具有完全相同的功能(唯一的区别是 BO 有一个 DAO setter),为什么它们被分成不同的类。

作者仅解释了模式:

is useful to identify the layer clearly to avoid mess up the project structure

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

最佳答案

他们所说的 BO 似乎是一种商业服务。 DAO 的工作是包含与持久性相关的代码:插入、更新、查询数据库。

服务划分事务,包含业务逻辑,通常使用一个或多个 DAO 来实现此逻辑。对于某些用例,服务只是委托(delegate)给 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
}

关于java - DAO & BO(数据访问层)——架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14923725/

相关文章:

java - 过滤掉 Log4j2 文件中的 Hibernate 日志

java - 是否可以在 wifi 网络中设置域名?

sql-server - 数据库架构比较错误 : 'Version store out of memory'

java - 在使用 Struts 2 的疲惫 Web 应用程序中,哪里是开始使用 Hibernate 进行事务处理的最佳位置?

java - org.hibernate.exception.GenericJDBCException : could not execute query] with root cause

java - 如何在ajax成功函数中从java获取单值响应

java - 安装Android Eclipse时出错

php - MySQL 查询 - 添加列和行

java - 连接到外部数据库 - Android 应用程序

java - 如何使用 JDBC 和连接池实现 DAO 管理器?