【问题标题】:DAO & BO (data access layer) - architectureDAO & BO(数据访问层)——架构
【发布时间】:2013-02-02 03:23:25
【问题描述】:

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

作者仅解释说,模式:

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

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

【问题讨论】:

  • 我想象一个人的 BO 会保存数据,而一个人的 DAO 会检索数据。
  • 如果 DAO 不分离,BO(服务)很难重用 DAO。还有其他优点,例如,如果您更改底层 DB 或 ORM 框架,BO 不会受到影响,因为只需要更改 DAO 的实现部分。

标签: java database dao layer


【解决方案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
}

【讨论】:

  • @JB +1 转账示例
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2010-09-12
  • 2019-07-31
相关资源
最近更新 更多