论坛首页 Java企业应用论坛

查询方法接口设计的几种方式

浏览 3585 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-18  
DAO

1. 每个条件项对应一个入参

List find(String hql,Date startTime,int personId);

 优点:方法签名可读性强;

 扩展:要么改接口签名,要么增加参数构造重载方法,扩展性差;

 基本背离了面向接口编程的初衷,除非你很确定参数不被改变,否则少用为佳。

 

2.使用数组传递条件项参数

List find(String hql, Object[] params);

 优点:能保持接口稳定性

 缺点:方法可读性不强,JavaDoc要写清楚啊。

 用的最多的方法签名方式,Spring的HibernateTemplate就提供这样的方法。

 

3.使用不定参数

List find(String hql,Object ...params);

 用起来和2没区别。

 

4.将查询条件封装成对象

List find(String hql , QueryParamObjec param);

 没事干还要去维护这么一个DTO,而且变更时还是要去维护那个DTO的,除非追求类数目,否则不要这么...

 

5.使用Map传递条件参数

List find(String hql , Map params);

 优点:参数变化时保持签名的稳定;

 缺点:方法可读性不强,依旧要写好注释;

 这个签名在条件查询时用得很多,直接request.getParameterMap()得到Map,然后往下层丢就好了。

 

感觉2和5用的很广泛,看来面向接口的原则很重要滴呀。

 

   发表时间:2008-09-18  
2和5固然会用的最多,因为具有普遍性,但看不出跟面向接口编程有什么关系啊。
另外,
List find(String hql,Object ...params) 跟 List find(String hql, Object[] params); 
还是有点区别, 如果只有一个参数, 前者不需要用数组,因此我觉得还方便点,但需要jd5才能支持。
0 请登录后投票
   发表时间:2008-09-18  
呵呵,我觉得保证接口的稳定性在接口设计时是很重要的,这也算面向接口的一方面吧
0 请登录后投票
   发表时间:2008-09-18  
miracle9i 写道

1. 每个条件项对应一个入参

List find(String hql,Date startTime,int personId);

 优点:方法签名可读性强;

 扩展:要么改接口签名,要么增加参数构造重载方法,扩展性差;

 基本背离了面向接口编程的初衷,除非你很确定参数不被改变,否则少用为佳。 


的确要衡量此接口的改变频度,不过当接口需要发生变化的时候,你能确定接口的意义不会发生变化吗?

如果接口的意义都变化了,仍然保留原来的接口会有很多隐患吧。

这种方式的优点,除了可读性强外,还有编译检查。

 

如果是对外部团队的接口,尽量还是不要变吧。如果是对团队内部的,接口发生变化的时候,能快速定位到需要变化的地方并更正,有时比不变接口而只改变接口的意义更好吧。

0 请登录后投票
   发表时间:2008-09-18  
public List findByParamAndPage(HashMap params,Class c,String order,boolean asc,int first,int max);

俺的dao通用接口
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics