对于一个注册用户,一个是管理员
      用户对于消息的查询是只能查询自己的消息,所以需要sql里需要用户名这个参数.
     而管理员查询就不需要这个参数.
现在对于DAO的设计,感到有点困惑(新手).比如说findAll这个方法需不需要加username这个参数啊????对于用户个人自己的查询似乎都需要这个username这个参数.而对于管理员来说,它就不需要这个参数.设计成两个接口,应该是可以的,不过对于用户那个DAO接口里的方法似乎都需要username这个参数(可以将参数用一个field来代替),但是还是感觉这样设计问题很多.不知道怎么解决.希望指点下

解决方案 »

  1.   

    -------------------------
    根据具体情况调用哪个。findAll()
    findUsername(String username)
      

  2.   

    DAO是访问数据库的基础设施,它的细粒度问题决定了他的重用性。
    关于这个接口方法增加username作为参数,没有什么不可的,当然你也可以制作一个查询类Query,将需要的查询参数作为Query的属性。这样DAO就只需要一个
    Query做为参数。
      

  3.   

    接口中findAll方法可以重载
    至于调用哪个可以在logic层判断
      

  4.   

    接口可以只用一个,不过可以赋予他多功能,你可以都使用findUsername(String username)来查询,你可以规定该接口的功能,如果没有传入username,那么表示不需要使用username作为限制,即可以查询全部记录,如果传入了username那么则按照username里查询,一个接口足矣,没有必要搞两个,记住设计接口的要素:保证接口数量尽量少,保证接口功能清晰。
      

  5.   

    我就是觉得如果加入username,这样对于用户的方法的参数就有点过于负责了(因为对于用户来说,基本上每个方法都要username这个参数为基础) 不知道有没有好的解决方法...
      

  6.   


    你简直多虑了,DAO是一个访问数据库的基础设施,你不这样做,你想怎么做?看样子关于设计还是要练兵才行啊
      

  7.   

    你这应该属于权限问题吧,在访问数据之前先判断下用户的权限,如果是一般用户,就调用findByUserName(String userName),如果是管理员的话就直接调用findAll()方法。
      

  8.   

    我同意楼上的意见,应该考虑的是权限问题,
    不考虑权限的话我怎么觉的应该建立两个方法啊,
    管理员使用findAllUserMessage(){}
    用户使用findAllMessage(String userName){}
    这样是不是好点...........
    个人看法
      

  9.   

    你的查询结果要精确到个人,你必须使用一个参数来限制,你也可以就使用一个方法;
    public List findAll(String username){//当身份为用户的时候username,当是管理员时就传一个null值,
     if(username!=null){//判断是不是用户,为用户时执行相应操作
      ............. 
     }else{){//执行管理员相应操作  ...........
     }
    }
      

  10.   

    这个问题主要还是看你的应用和你自己想怎么实现啊,findAll只是一个自定义的方法,在写程序不一定要拘泥于单一的思想啊,我觉得你最好是把你提的这个情况都自己写出方法来应用,熟悉了也就知道怎么运用了,