网上说在设计DAO层的时候都会先提出DAO的接口,那是每个DAO实现类对应一个接口类还是所有的DAO实现类对应一个接口类?如果DAO实现类有多种查询组合,比如有通过名称查询,有通过ID查询,还有多个条件的查询,查询的接口该如何设计?

解决方案 »

  1.   

    把DAO当服务来设计,答案基本是一样的。每个服务应该有一个接口,除非你打算用Facade模式。通过名称查询?getXXOOByName()  queryXXOOByName()
    多条件查询? 参数直接传条件VO。
      

  2.   

    一般来说一个接口对应一个是实现。
    至于组合条件查询,条件全部作为参数传入方法中,通过判断传入参数是否有值,来做相应的组合查询。
    参数如果较多,则一般把参数组合成一个对象传入方法。
    比如:
    class QueryData{
       String a;
       String b;
    }
    List querySth(QueryData data){}
      

  3.   

       我提出这个疑惑,是发现在设计DAO接口的时候,确实很难抽象出一个能覆盖所有
    DAO实现类方法的接口,网上的通用DAO基类我也看过,基本就是把CUID,没更多的内容。
    如果采用一个接口对应一个实现的方式,那接口的数目会一直膨胀,这是不是在增加维护工作?
       查询的接口设计很复杂,组合条件查询的参数合成对象或数组传入方法这个也有问题,如果
    不仅仅是"name=@Name" 这类简单的=操作,可能还有" name <> @name " 或者 "name in (@nameList)"这类查询操作,如何在方法内识别不同的操作?
      

  4.   

    分两种情况 :
    1.对于简单的增删改查,所有的DAO可以共用一个接口,把它抽象出来,
    2.对于复杂的查询操作,单独为此建立接口同时继承共用接口,
    作用:
    1.减少重复的增删改查的代码量
    2.为复杂的需求做个单独接口,可以适应复杂的查询要求,为未来的需求变化做相应的接口
      

  5.   

    对于不同条件的组合查询,可以定义多个sql string来作为查询参数,这样只需要一个基本查询方法就可以了。这个应该没有统一的办法,按照项目需要,自己进行设计,掌握好设计目标,比如易于维护,减少类的数目等等。