`
xly_971223
  • 浏览: 1283630 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于dao service层设计的心得

阅读更多

图片太小了 看不清  请看附件

我们先看下面的类图


这是一个常用的dao层设计:

DAO (interface)

UserDAO extends DAO (interface)

BaseDAOHibernate implements DAO

UserDaoHibernate extends BaseDAOHibernate implements UserDao

采用这样的设计是为了提高代码的复用,在本例中就是基本的CRUD方法的复用

我们分析一下代码是怎么样被复用的

我们看一下中间的两个class UserDao BaseDaoHibernate 他们跟DAO接口都有直接的关系 一个是继承 一个是实现,换句话说他们都对DAO进行了扩展,UserDao是横向(接口)的扩展,BaseDAOHiberate是纵向的扩展,横向和纵向都扩展了之后要怎样合二为一呢?这个问题由UserDAOHibernat来解决了

通过看上面的图可以看出UserDAO BaseDAOHibernat是作为一个中间层存在的,最终目的是让UserDAOHibernate拥有DAO接口的CRUD操作。

我们再来看下面这个图,是不是跟上图有着惊人的相似 其实仔细看一下这两个图完全的一样,目的也是复用CRUD操作


那么由此我们可以推出什么呢?这个例子能够得出什么结论呢?

凡是对底层的代码进行扩展都可以通过这种横向和纵向的方式来进行

  • 大小: 2.9 KB
  • 大小: 3.5 KB
分享到:
评论
18 楼 bluemeteor 2008-08-29  
ecsun 写道
泛型 DAO有很多开源项目实现在很好,比如我们熟悉的 Appfuse2.0, SpringSide,以及bba96等,都做了很好的实现,我们完全可以拿来主义嘛.不过做人要厚道啊,拿来用可以,要"守法"啊~~~~~~~~


泛型DAO可以理解为是一种简单、明了的设计模式,没有什么守法的问题.
17 楼 fantasybei 2008-08-29  
sifeng618435 写道
UserDaoHibernate extends BaseDAOHibernate implements UserDao这里是不是有点怪
BaseDAOHibernate 已经实现了UserDao了,
UserDaoHibernate 实现UserDao就不用了吧


BaseDAOHibernate 只实现了DAO,没有实现UserDAO
16 楼 eccojap 2008-04-04  
晕,我的想法跟搂主不谋而合,看来我进步了,呵呵
只不过我的出发点是节省开发时间,自己写个脚本,可以由Bean自动生成
UserDao和UserDAOHibernate
15 楼 cindy_taozhiang 2008-03-28  
seablue_xj 写道
我觉得还是加入service层比较好,如果是能大量使用的业务,责将业务假如到dao层,将dao层设计成富模式,相反,如果不是大量使用的,则将业务设计到service层中,dao层中使用贫血设计模式,




   嗯. 这种想法不错
14 楼 sifeng618435 2007-12-05  
UserDaoHibernate extends BaseDAOHibernate implements UserDao这里是不是有点怪
BaseDAOHibernate 已经实现了UserDao了,
UserDaoHibernate 实现UserDao就不用了吧
13 楼 seablue_xj 2007-12-01  
我觉得还是加入service层比较好,如果是能大量使用的业务,责将业务假如到dao层,将dao层设计成富模式,相反,如果不是大量使用的,则将业务设计到service层中,dao层中使用贫血设计模式,
12 楼 yangdefeng95802 2007-11-22  
realorg 写道
gordon@java 写道
应该是Dao/BaseDAOHibernate是对所有对象crud的操作都能工作的,其中crud某些方法的参数会包括Class cls. UserDao/UserDaoHibernate是专门针对user类的,这个的crud是不需要传入Class的,比如直接给id或者条件就好,不需要User.class,这样的封装对于使用UserDao的代码会好些

Dao可能的方法
public T findById(Class<T> cls,Long id)

对应的UserDao的方法
public User findById(Long userId)


确实,偶也觉得应当这样理解比较合适。
好像有这个!
11 楼 realorg 2007-11-08  
gordon@java 写道
应该是Dao/BaseDAOHibernate是对所有对象crud的操作都能工作的,其中crud某些方法的参数会包括Class cls. UserDao/UserDaoHibernate是专门针对user类的,这个的crud是不需要传入Class的,比如直接给id或者条件就好,不需要User.class,这样的封装对于使用UserDao的代码会好些

Dao可能的方法
public T findById(Class<T> cls,Long id)

对应的UserDao的方法
public User findById(Long userId)


确实,偶也觉得应当这样理解比较合适。
10 楼 williamy 2007-10-10  
把基本操作泛化就可以了,ibm developers上好像是03 04的文章
9 楼 vlinux 2007-10-04  
我的做法是首先让Entity全部都实现一个空接口 Entityable

然后定义基Dao接口

public interface BaseDao<T extends Entityable> {

    T find(Object primaryKey);
    void create(T t);
    void modify(T t);
    void delete(T t);

}

然后其他子接口一律继承BaseDao<T>

public interface AccountDao extends BaseDao<Account> {

}



实现的时候BaseDao用BaseDaoImpl去实现
而AccountDao则用AccountDaoImpl extends BaseDaoImpl implements AccountDao去实现

不知道这样的做法是否合理呢~
8 楼 hyhongyong 2007-09-30  
不错,UserDao是接口扩展,BaseDAOHibernate是抽象类扩展。
7 楼 foxgst 2007-09-30  
纵向是实现方式上的扩展,比如采用多种方式实现;横向是功能上的扩展,继承多个接口实现扩展。
6 楼 yanq12 2007-09-30  
请的不够清楚
5 楼 gordonAtJava 2007-09-26  
应该是Dao/BaseDAOHibernate是对所有对象crud的操作都能工作的,其中crud某些方法的参数会包括Class cls. UserDao/UserDaoHibernate是专门针对user类的,这个的crud是不需要传入Class的,比如直接给id或者条件就好,不需要User.class,这样的封装对于使用UserDao的代码会好些

Dao可能的方法
public T findById(Class<T> cls,Long id)

对应的UserDao的方法
public User findById(Long userId)
4 楼 jive 2007-09-26  
有点模糊,结合点小实例看看

我看好多范型DAO也都是这样设计的
3 楼 jameswei 2007-09-06  
来学习了
2 楼 xly_971223 2007-09-06  
huangpengxiao 写道
引用
凡是对底层的代码进行扩展都可以通过这种横向和纵向的方式来进行


这个部分的扩展?

BaseDAOHibernate implements DAO?

如果这个算纵向? 横向是.....?

横向是UserDao 对接口进行扩展
1 楼 huangpengxiao 2007-09-06  
引用
凡是对底层的代码进行扩展都可以通过这种横向和纵向的方式来进行


这个部分的扩展?

BaseDAOHibernate implements DAO?

如果这个算纵向? 横向是.....?

相关推荐

    ssh框架总结_ ssm心得体会-Java文档类资源

    这包括了数据源、SessionFactory、Service层、DAO层等的配置。 3. **配置Struts**:创建Struts2的配置文件,定义Action及其对应的业务方法,设置结果视图。同时,可以配置全局异常处理和拦截器链。 4. **配置...

    Jfinal使用心得以及架构

    - **分层架构**: 在大型项目中,JFinal 可以与其他技术结合,例如采用 Service 层实现业务逻辑,DAO 层进行数据访问,使用 MyBatis 或 Hibernate 作为持久层框架。 - **RESTful API 设计**: 利用 JFinal 的注解...

    课程设计任务书 ssh 企业级

    - **分层设计**:UI层(视图)、Action层(控制)、Business/Service层(业务逻辑)、DAO层(数据访问)和Model层(模型)的五层架构,确保代码的清晰度和可维护性。 **3. 实施要求** - **时间限制**:考虑到一周...

    SSM框架写的一个增删改查,适合初学者看看,

    SpringMVC的DispatcherServlet是入口点,它根据请求映射信息分发到相应的处理器(Controller),再由Controller调用Service层处理业务,Service层通常会调用DAO层来操作数据库。 MyBatis是一个轻量级的持久层框架,...

    基于java web的学生信息交流和自主管理系统的设计与实现 (2).pdf

    根据设计完成编码工作,包括编写Action类、Service接口及其实现、DAO类等,同时配置Struts2框架,实现页面跳转和数据绑定。 3.4 测试阶段 进行单元测试、集成测试和系统测试,确保每个功能模块正常运行,修复发现的...

    struts跟数据库的笔记,心得.rar

    2. 事务管理:在Struts中,事务通常在服务层(Service Layer)进行管理,可以使用编程式事务或者声明式事务(如Spring的@Transactional注解)。 总结,本笔记详尽地记录了在Struts框架下如何进行数据库操作,涵盖了...

    javaweb学习代码

    在"ServiceDemo"这个文件名中,我们可以推测这是演示了服务层(Service层)的代码,这部分通常包含业务逻辑处理,与DAO层交互,处理数据验证、计算等任务。服务层是MVC架构中的关键部分,它将控制逻辑与数据操作解耦...

    基于SSM的学生竞赛模拟系统源码.zip

    每个模块都会涉及到对应的服务层(Service)和DAO(Data Access Object)层,Service层负责业务逻辑,DAO层则负责与数据库交互。系统可能还会有自定义的过滤器、拦截器来实现权限控制、日志记录等功能。 总的来说,...

    SSH整合流程(个人总结,仅供参考)

    SSH整合流程是Java Web开发中常见的...在实际开发中,还需要根据业务需求编写具体的Action类、Service层和DAO层代码,以及数据库相关的SQL语句。理解SSH整合的流程有助于开发者更好地掌握Java Web开发,提高开发效率。

    SpringMVC+hibernate+spring实现增删改查

    3. Controller方法调用Service层的业务逻辑,这里的Service通常由Spring管理,依赖注入了DAO层(数据访问对象)。 4. DAO层使用Hibernate提供的API执行数据库操作,如Session的save()方法实现新增,update()方法实现...

    基于springboot的数码论坛系统源码.zip

    利用SpringBoot的Controller和Service层设计,实现业务逻辑。 3. 分类模块:数码论坛可能涉及手机、电脑、摄影等多个分类,用户可以根据兴趣浏览不同板块。 4. 搜索模块:提供关键字搜索功能,方便用户查找相关信息...

    SSM+maven+mysql实现登录注册功能

    在登录注册系统中,Spring可以用来创建和管理DAO(Data Access Object)、Service等层的实例,通过配置XML或使用注解实现依赖注入。 SpringMVC是Spring的一个模块,用于处理HTTP请求和响应,实现前端控制器模式。它...

    毕业论文java jsp ssm mysql 012大学运动场地管理系统.docx

    之后,作者通过编写Java代码实现了系统的各项功能,这部分可能涉及JSP页面、Controller、Service及DAO层的代码编写。 论文最后的部分是对整个项目的总结,作者分享了在开发过程中的心得体验,强调了系统实施后对...

    基于SSM实现的动漫论坛系统.zip

    - Service:业务逻辑层,处理业务规则,调用DAO层操作数据。 - Controller:处理HTTP请求,调用Service层,返回视图或JSON数据。 2. **src/main/resources**:配置文件和资源文件的存放地,如Spring的配置文件、...

    基于springboot的汽车资讯网站源码数据库.zip

    控制器层是前后端交互的关键,它接收前端的请求,调用服务层(Service)进行业务处理,然后将结果返回给前端。 服务层(Service)是业务逻辑的核心,它封装了复杂的业务规则和操作。例如,汽车资讯的发布、评论的...

    javaweb企业门户网站源码

    1. 基于Spring+SpringMVC+Mybatis的框架,Dao层、Service层、Controller层分离 2. MySQL数据库存储用户、新闻、公告、帖子、知识分享等信息 3. Elasticsearch实现新闻、公告、帖子、知识分享搜索 4. 前端使用JSP、...

    ssh开源框架日志心得.pdf

    DAO和Service通常被设计为单例,以提高性能和资源利用率。而Action通常配置为多例(Prototype),因为每个HTTP请求可能需要一个独立的Action实例,以保持请求间的状态隔离。 6. **SessionFactory配置**: `...

    SSM框架只是总结以及思维导图

    6. **Service层开发**:利用Spring的依赖注入,将DAO注入到Service中,编写业务逻辑。 7. **Controller层开发**:创建Controller,处理HTTP请求,调用Service方法,并将结果返回给前端。 8. **视图渲染**:使用JSP...

    java_ssm框架总结

    7. **编写Controller层**:处理前端请求,调用Service层方法。 8. **前端开发**:使用HTML、CSS、JavaScript等技术实现前端页面。 9. **集成测试**:确保各层之间的正常交互。 10. **部署上线**:将项目部署到服务器...

    二十三种设计模式【PDF版】

    为能和大家能共同探讨"设计模式",我将自己在学习中的心得写下来,只是想帮助更多人更容易理解 GoF 的《设计模式》。由 于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等...

Global site tag (gtag.js) - Google Analytics