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