java web项目中dao的接口,实现类和service接口,实现类区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web项目中dao的接口,实现类和service接口,实现类区别相关的知识,希望对你有一定的参考价值。

dao实现类里已经完成了基本的CRUD操作,为什么不在jsp页面中直接使用这些dao类呢,而是又写个service类接口和实现方法,例如:
public void deleteBook(String bookId)
Books book=booksDao.getBook(bookId); booksDao.deleteBook(book);
service中的方法还不是来自于dao类吗,为什么多此一举?难道这样做有什么好处?

Dao是数据访问层,用来保存数据。

Service是业务逻辑处理的。

 我们开发程序的目的是为了完成业务功能, 理想的情况下程序中的每一条语句都应该是与业务直接相关的, 例如程序中不应该出现连接数据库, 读取某个字段等纯技术性的操作, 而应该是得到用户A的基本信息等具有业务含义的操作. dao(data access object)层存在的意义在于将与数据持久化相关的函数调用剥离出去, 提供一个具有业务含义的封装层. 原则上说, dao层与utils等帮助类的功能非常类似, 只是更加复杂一些, 需要依赖更多的对象(如DataSource, SessionFactory)等. 如果不需要在程序中屏蔽我们对于特定数据持久层技术的依赖, 例如屏蔽对于Hibernate的依赖, 在dao层我们没有必要采用接口设计. 一些简单的情况下我们甚至可以取消整个dao层, 而直接调用封装好的一些通用dao操作函数, 或者调用通用的EntityDao类等.
    程序开发的过程应该是从业务对象层开始的, 并逐步将纯技术性的函数调用剥离到外部的帮助类中, 同时我们会逐渐发现一些业务操作的特定组合也具有明确的含义, 为了调用的方便, 我们会把它们逐步补充到service层中. 在一般的应用中, 业务逻辑很难稳定到可以抽象出接口的地步, 即一个service接口不会对应于两个不同的实现, 在这种情况下使用接口往往也是没有必要的.
    
    在使用spring的情况下原则上应该避免使用getBean的调用方式, 应该尽量通过注入来获得依赖对象, 但有时我们难免需要直接获取业务对象, 在不使用接口的情况下可以采用如下方式

    class TaskService
        public static TaskService getInstance()
            return (TaskService)BeanLoader.getBean(TaskService.class);
        
    

    在程序中我们可以直接使用TaskService.getInstance()来得到TaskService对象.通过命名规范的约定, 我们可以从类名推导出spring配置文件中的对象名, 因而不需要使用一个额外的硬编码字符串名.

参考技术A 当然有好处了,现在你感觉多此一举是因为需求业务少,若是一个大项目要大量的需求,如果写在一个service里到时会很乱的,写在一个dao类里,可以更清晰更加条理,现在要养成习惯,在工作时会明白的! 参考技术B 你这是没涉及到缓存,如果涉及到的话,service还有对缓存的操作,这样service可以把对缓存和DB的操作封装起来,是的你在上层调用时更清晰。如果只涉及dao,service的意义确实不大。

SSH框架中POJO层, Dao层,Service层, Action层的功能理解

pojo层就是对应的数据库表的实体类(如User类)。

dao层,一般可以再分为***dao接口和***daoImpl实现类,如userDao接口和userDaoImpl实现类,接口负责定义数据库curd的操作方法,实现类负责具体的实现,即实现Dao接口定义的方法。

service层,引用对应的dao层数据库操作,在这里可以编写自己需要的代码(比如简单的判断),也可以再细分为service接口和serviceImpl实现类。

action层:引用对应的Service层实现业务逻辑,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理、前端输入合法性检验(前端可修改网页绕过前端合法性检验,需在后台加一层)。

 

对象的调用流程:前端JSP或JS等—Action—Service—DAO—数据库。

 

 

一个比喻:

Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;

Service是厨师,action送来的菜单上的菜全是ta做的;

Dao是厨房的小工,和原材料(通过Hibernate操作数据库)打交道的事情全是ta管。

 

via:http://blog.csdn.net/halimao/article/details/52397592

以上是关于java web项目中dao的接口,实现类和service接口,实现类区别的主要内容,如果未能解决你的问题,请参考以下文章

java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl

java三大框架为啥要一个实现类和一个接口???

在Java WEB的DAO层开发中关于DAO接口的使用,求解答

java web-----DAO设计模式(数据库访问)

Java框架之spring—jdbcTemplate

用户注册登录项目