论坛首页 Java版 DAO

关于dao service层设计的心得

浏览 7509 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-09-06 关键字: 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操作


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

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

  • 0026ee50-8001-47c1-9146-24925caf56f0-thumb
  • 描述:
  • 大小: 2.9 KB
  • 查看次数: 552
  • Eb0fb559-9435-4e72-af57-c8f65e350aa4-thumb
  • 描述:
  • 大小: 3.5 KB
  • 查看次数: 371
   
时间:2007-09-06
引用
凡是对底层的代码进行扩展都可以通过这种横向和纵向的方式来进行


这个部分的扩展?

BaseDAOHibernate implements DAO?

如果这个算纵向? 横向是.....?
   
0 请登录后投票
时间:2007-09-06
huangpengxiao 写道
引用
凡是对底层的代码进行扩展都可以通过这种横向和纵向的方式来进行


这个部分的扩展?

BaseDAOHibernate implements DAO?

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

横向是UserDao 对接口进行扩展
   
0 请登录后投票
时间:2007-09-26
有点模糊,结合点小实例看看

我看好多范型DAO也都是这样设计的
   
0 请登录后投票
时间: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)
   
0 请登录后投票
时间:2007-09-30
请的不够清楚
   
0 请登录后投票
时间:2007-09-30
纵向是实现方式上的扩展,比如采用多种方式实现;横向是功能上的扩展,继承多个接口实现扩展。
   
0 请登录后投票
时间:2007-09-30
不错,UserDao是接口扩展,BaseDAOHibernate是抽象类扩展。
   
0 请登录后投票
时间: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去实现

不知道这样的做法是否合理呢~
   
0 请登录后投票
时间:2007-10-10
把基本操作泛化就可以了,ibm developers上好像是03 04的文章
   
0 请登录后投票
论坛首页 Java版 DAO

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)