当前位置:编程学习 > JAVA >>

java 数据库封层设计

在接触的项目中是这样一个结构

这个类继承结构就是这样。
在IBatisEntityDao类中实现了EntityDao接口和实现了IBatisGenericDao类。
其中EntityDao接口中的方法是由IBatisGenericDao实现的。所以这边我觉得好像EntityDao的作用似乎不大呀。
还有一个问题在接口设计中我们会这样定义
interface Base
class Baseimpl implement Base
class Aimpl extends Baseimpl implement Base
这样设计的好处是什么。为什么不可以直接使用class Aimpl extends Baseimpl。
这块这样写其实就不能理解,希望大姐大哥指教
数据库 java --------------------编程问答-------------------- 在IBatisEntityDao类中实现了EntityDao接口和实现了IBatisGenericDao类。

这句说错了吧  是 IbatisEntityDao extends IbatisGenericsDao implements EntityDao吧
通用的IbatisGenericDao应该有一个实现类,实现了通用的常见CRUD方法,传递的是泛型。

这样的设计BaseInterface如果有好几个实现类的话BaseDaoImplA BaseDaoImplB
再加一层service层的话 BaseServiceImpl只要调用Dao接口就可以了 实现可以替换的
例:
public interface BaseService{}
public class BaseServiceImpl implements BaseService{
  private BaseDao baseDao = new BaseDaoImplA();//这里随时可以换成new BaseDaoImplB,而且后面只要调用baseDao的地方都不会变动,解耦合
}

设计中的开闭原则:对增加开放,对修改关闭
将来客户需要BaseDaoImplA中的方法有变动,我只需要新加1个BaseDaoImplB,将方法再按需求实现下就OK,变动也仅仅是private BaseDao baseDao = new BaseDaoImplA();这一句代码换成new BaseDaoImplB()即可 --------------------编程问答-------------------- 理解了。以前学习Hibernate数据库的时候也看过也理解过,估计运用的少所以就难以真正的理解,谢谢 --------------------编程问答-------------------- 1楼实属误人子弟啊;
你那完全是紧耦合,一旦持久层变了,你所有调用BaseDaoImplA的业务层都需要修改。在业务层中可以这样:
public void  getValues(Base base){
base调用实现它的类的方法。。
}
建议你看下spring是如何实现松耦合的。。

关于楼主的问题:
只有一个儿子的接口,我觉得写写还是比较好吧,用接口接收后代是编码习惯,而且谁知道接口会不会有别的后代呢,你说是吧。
但是class Aimpl extends Baseimpl implement Base这样的写法肯定是SB行为,为什么?因为Aimpl 这个孙子即继承了父亲又继承了爷爷,而爷爷把东西已经给了父亲,纯属多余。楼主相信自己,写class Aimpl extends Baseimpl 是正确的。
--------------------编程问答-------------------- 我也一直纳闷这个问题,为什么要设计那么多基类呢?直接按照目标来设计一个实现类不就行了吗?参加了几个项目也没有这么弄的啊,是不是现在公司里面都这样啊
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,