Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 道及;BO(数据访问层)-体系结构_Java_Database_Dao_Layer - Fatal编程技术网

Java 道及;BO(数据访问层)-体系结构

Java 道及;BO(数据访问层)-体系结构,java,database,dao,layer,Java,Database,Dao,Layer,我对网络上的一个例子有点困惑(point4.Model&BO&DAO)。有Model、DAO和BO类(+DAO和BO接口)。我不清楚的是,如果DAO和BO共享完全相同的功能,为什么它们被划分为不同的类(唯一的区别是BO有一个DAO设置器) 作者仅解释说,模式: 有助于清楚地识别图层,以避免弄乱项目结构 但对我来说,这似乎是过度设计(至少在这种情况下)。我知道这个例子很简单,但是这个类分离有什么用处呢?有人能举个例子吗?他们所谓的BO似乎是一种商业服务。DAO的任务是包含与持久性相关的代码:插入、

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

作者仅解释说,模式:

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


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

他们所谓的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
}
public void transferMoney(长sourceAccountId、长targetAccountId、大十进制金额){
Account source=accountDAO.getById(sourceAccountId);
账户目标=accountDAO.getById(targetAccountId);
if(source.getBalance().compareTo(amount)<0){
抛出新的NotEnoughMoneyException();
}
来源.递减天平(金额);
目标。增量余额(金额);
insertTransaction(sourceAccountId、targetAccountId、amount);
//其他业务逻辑
}

I想象一个人的BO将保存数据,而DAO将检索数据。如果DAO不分离,BO(服务)将难以重用DAO。还有其他好处,例如,如果您更改基础DB或ORM框架,BOs将不受影响,因为只有DAO的实现部分需要更改。@JB+1用于转账示例