`
julyflame
  • 浏览: 11952 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

DAO,Service,BO的关系

阅读更多
1,DAO
一般情况下,一个DAO对应一个POJO对象。Service层是为了处理包含多个POJO对象(即对多个表的数据操作)时,进行事务管理(声明式事务管理)。Service层(其接口的实现类)被注入多个DAO对象,以完成其数据操作。
2,Service
模式1:
是Service + DAO,即DAO中只做CRUD及类似的简单操作(称之为功能点,不包含业务逻辑),Service中通过调用一个或多个DAO中的功能点来组合成为业务逻辑.Service的数量应该由功能模块来决定。
在这种模型中业务逻辑是放在Service中的,事务的边界也应该在Service中控制. 当然,直接在Service中控制事务会引入非业务逻辑的代码,幸好Spring的AOP可以解决这个问题,这也是引入Spring的原因之一.
如果说到缺点,就在于对某些对象的操作就是简单的CRUD,Service层显得累赘
模式2:
Service + BO, 而BO = DAO + 业务方法, 在原先DAO的基础上添加业务方法,形成BO对象。需要注意的是BO中的业务方法往往是针对一个实体对象的,如果需要跨越多个实体对象,则方法应该放在Service中。
当然小规模的应用中,没有Service,完全是DAO或BO也是可以接受的。
3,接口之有无
接口是一种契约,它可以有多种实现。所以接口之有无取决于具体实现是否需要多样化。如果铁定一种DAO或一种Service只有一种实现,那么抽象出接口的意义不大。然而一些大型应用或许需要DAO和Service的多种实现(比如上面例子中的帐户DAO,可能需要一种Hibernate实现、一种CMP实现和一种JDO实现),为了向上一层隐藏具体实现类,需要采用接口。
隐藏具体实现类的创建过程,这有两种方法:一是实用工厂方法,代价是代码量大(每个DAO和Service一个工厂)。二是使用Spring的IoC,实现依赖注入,不需要写额外的代码,这也是引入Spring的理由之二
分享到:
评论

相关推荐

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的

    FreeMarker模板包括dto、dao、rowmapper、bo、service

    FreeMarker通用模板。... 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。... 那就意味着要准备数据在真实编程语言中来显示,比如...

    sping springmvc mybatis框架的maven web项目

    本人搭建的ssm框架的maven web项目,用maven管理项目的jar包,项目架构搭好,用的都是现阶段最新的jar包,日志输出用log4j,controller层/service层/bo层/dao层都整合好,测试通过,可以直接用作项目开发

    金蝶BOSV6.1_业务组件API参考手册

    com.kingdee.bos.dao.ormapping_ex.service com.kingdee.bos.dao.ormapping.client com.kingdee.bos.dao.ormapping.impl com.kingdee.bos.dao.ormapping.lazyload com.kingdee.bos.dao.query ...

    java逆向生成实体类工具

    Java逆向生成实体类:包括所需要的import,tag,字段注释,序列化等。配套的还有dao层,dao.xml,service层,serviceImpl的生成文件,在其他下载资源中。

    knowledge

    BO Business Object 业务对象,Service输出的封装业务逻辑对象 AO Application Object 应用对象,Web层和Service层之间抽象的复用对象 VO View Object 显示层对象,Web向模板传输的对象 Query 数据查询对象 各层接收...

    sping springmvc mybatis框架的web项目

    本人搭建的ssm框架的web项目,项目架构搭好,用的都是现阶段最新的jar包,日志输出用log4j,controller层/service层/bo层/dao层都整合好,测试通过,可以直接用作项目开发

    sping4.2.5 springmvc4.2.5 mybatis3.4框架(SSM)的maven web项目,整合了log4j redis quartz

    本人搭建的ssm框架的maven web项目,用maven管理项目的jar包,项目架构搭好,用的都是现阶段最新的jar包,整合了log4j日志,redis缓存,quartz定时任务,全局配置文件在代码中使用等,controller层/service层/bo层/dao层都...

    sping springmvc mybatis框架的maven web项目,整合了log4j日志 redis缓存 quartz定时任务

    本人搭建的ssm框架的maven web项目,用maven管理项目的jar包,项目架构搭好,用的都是现阶段最新的jar包,整合了log4j日志,redis缓存,quartz定时任务,全局配置文件在代码中使用等,controller层/service层/bo层/dao层都...

    tim-root:基于Spring引导构建Spring Cloud项目

    common-dao:数据模型层(Dao、Entity、Mapper生成) common-dto:数据交互层(VO、PO、BO、DTO等) service-user:用户服务提供者(用户注册、登录、权限等) operation-system:运营系统(服务消费者) 集成技术 ...

    Smart Admin通用型中后台解决方案-其他

    同时身心愉悦的规范后端代码规范:1、好多种分包,哪种更合理一些2、四层架构(controller, service, manager, dao) 是什么,为什么要有四层3、各个层的代码该怎么写才能让团队配合默契,高度一致4、vo, bo, dto, ...

    Smart Admin通用型中后台解决方案 v1.0.9

    2、四层架构(controller, service, manager, dao) 是什么,为什么要有四层 3、各个层的代码该怎么写才能让团队配合默契,高度一致 4、vo, bo, dto, entity 怎么区分和使用 5、spring的 @Transactional 你用对了...

    一个支持annotation的SSH整合示例项目

    │ │ │ └─service │ │ │ └─login │ │ │ │ LogInService.java │ │ │ │ │ │ │ └─impl │ │ │ LogInServiceImpl.java │ │ │ │ │ ├─resources │ │ │ applicationContext....

Global site tag (gtag.js) - Google Analytics