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

解决方案 »

  1.   

    在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()即可
      

  2.   

    理解了。以前学习Hibernate数据库的时候也看过也理解过,估计运用的少所以就难以真正的理解,谢谢
      

  3.   

    1楼实属误人子弟啊;
    你那完全是紧耦合,一旦持久层变了,你所有调用BaseDaoImplA的业务层都需要修改。在业务层中可以这样:
    public void  getValues(Base base){
    base调用实现它的类的方法。。
    }
    建议你看下spring是如何实现松耦合的。。关于楼主的问题:
    只有一个儿子的接口,我觉得写写还是比较好吧,用接口接收后代是编码习惯,而且谁知道接口会不会有别的后代呢,你说是吧。
    但是class Aimpl extends Baseimpl implement Base这样的写法肯定是SB行为,为什么?因为Aimpl 这个孙子即继承了父亲又继承了爷爷,而爷爷把东西已经给了父亲,纯属多余。楼主相信自己,写class Aimpl extends Baseimpl 是正确的。