`
Just_抱怨
  • 浏览: 10653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor

 
阅读更多

今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor

 

StringBuffer sb =new StringBuffer("select d.*  from table d where 1=1 ");
  if(vo.getC() != null && !vo.getC().equals("")){
   sb.append(" and d.c like '%"+vo.getC()+"%'");
  }
  if(vo.getT() != null && !vo.getT().equals("")){
   sb.append(" and d.t = '"+vo.getT()+"'");
  }
  if(vo.getB()!=null && !vo.getB().equals("")){
   sb.append(" and d.B like '%"+vo.getB()+"%'");
  }
  if(vo.getD()!=null && !vo.getD().equals("")){
   sb.append(" and d.d = '"+vo.getD()+"'");
  }

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

 

这是一段简单的条件查询语句,vo是参数,table是数据库里的表名

 

这段代码应该怎么重构,如果以后查询条件多了该怎么办,谢谢

 

 

1
3
分享到:
评论
8 楼 hdp2010 2011-10-24  
    这个看你系统怎么设计,如果你组装这样的sql语句很多,完全可以写一个接口,提供将实体bean转换成一个sql语句的一部分;
interface ITransBeanToStr<T>{
  String beanToSql(T obj);
}利用反射实现
7 楼 Just_抱怨 2011-10-16  
hyj1254 写道
引用



这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。

至于命名,是我把后面的删了,公司有保密制度,代码严禁外泄的
6 楼 hyj1254 2011-10-15  
引用

StringBuffer sb =new StringBuffer("select d.*  from table d where 1=1 ");
  if(vo.getC() != null && !vo.getC().equals("")){
   sb.append(" and d.c like '%"+vo.getC()+"%'");
  }
  if(vo.getT() != null && !vo.getT().equals("")){
   sb.append(" and d.t = '"+vo.getT()+"'");
  }
  if(vo.getB()!=null && !vo.getB().equals("")){
   sb.append(" and d.B like '%"+vo.getB()+"%'");
  }
  if(vo.getD()!=null && !vo.getD().equals("")){
   sb.append(" and d.d = '"+vo.getD()+"'");
  }

这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。
5 楼 木易有峰 2011-10-15  
还是有些地方可以重构的吧。
在append里面在用+操作。
如果是JDK1.5的话 且不是多线程环境考虑用StringBuilder吧。
另外为啥不用变量代替 getT getB等呢。你这个里面每次都差不多get了三次吧。
4 楼 Just_抱怨 2011-10-15  
我看坏味道里面举得例子就和我这个相似,可他没有对它重构,只是提出来了
3 楼 Just_抱怨 2011-10-15  
287854442 写道
没什么可重构的。
至少

vo.getB()!=null && !vo.getB().equals("")

这一句能提取出来一个类似
public static boolean isEmpty(String value){
    return value == null || value.trim().equals("")
}

的方法。
哦 因为这个就三个条件 所以我就没写 很多地方我都写了
2 楼 287854442 2011-10-14  
没什么可重构的。
至少

vo.getB()!=null && !vo.getB().equals("")

这一句能提取出来一个类似
public static boolean isEmpty(String value){
    return value == null || value.trim().equals("")
}

的方法。
1 楼 Just_抱怨 2011-10-14  
自己先顶下,习惯了

相关推荐

    refactor(重构-改善既有代码的设计)

    refactor(重构-改善既有代码的设计),中文版共15章

    代码的重构,改善代码设计 refactor

    代码重构是软件开发中的一项持续性工作,目的是改善现有代码的质量而不改变其外部行为。重构的重要性不言而喻,它能帮助我们增强代码的可维护性、可读性和可扩展性。在本篇中,我们将详细介绍重构的定义、方法、原则...

    详解AndroidStudio中代码重构菜单Refactor功能

    在Android Studio的主菜单栏中有一项“Refactor”下拉菜单,点击该下拉菜单,会显示出多种代码重构功能项。这些功能项都是为代码重构提供的一项自动实现功能,旨在帮助开发者快速地重构代码、修改代码结构、提高代码...

    《重构:改善既有代码的设计》

    《重构:改善既有代码的设计》 refactor.chm

    代码重构源码(包含重构前后代码)

    总的来说,这个压缩包提供的重构实例是一个学习和实践代码重构的宝贵资源。通过对比重构前后的代码,我们可以学习如何识别和解决代码质量问题,以及如何运用面向对象设计原则来提高代码质量。这不仅有助于提升我们的...

    Python代码重构的艺术:探索自动化重构工具

    5. **Black** 和 **isort**:这两款工具虽不直接进行重构,但它们可以自动格式化代码并整理导入语句,有助于提高代码的整体质量和一致性。 #### 四、具体工具的使用案例 1. **Rope**:假设我们需要对某个Python...

    Delphi XE Refactor重构功能简单说明 .mht

    Delphi XE Refactor重构功能简单说明 .mht

    重构 改善既有代码的设计.ppt,编程功底的体现,必修课

    这一过程包括了动词“refactor”,即遵循一定的重构准则,对代码进行改造,使其结构更清晰,更易于理解和维护。 为什么需要进行重构呢?主要原因有以下几点: 1. **改进软件设计**:随着项目的进展,如果没有定期...

    sublime-text-refactor, 用于Javascript代码的sublime text 重构插件.zip

    sublime-text-refactor, 用于Javascript代码的sublime text 重构插件 用于 sublime-text-2和 3的 Javascript重构插件 [[Package Control] ( https://packagecontrol.herokuapp.com/downloads/JavaScript%2

    重构-改善既有代码的设计

    《重构:改善既有代码的设计》是一本由Martin Fowler所著的经典软件工程书籍,它深入探讨了重构这一关键的软件开发实践。重构是指在不改变软件外部行为的前提下,对其内部结构进行改进,以提高代码的可读性、可维护...

    重构:改善既有代码的设计(英文版) pdf 文字版

    《重构:改善既有代码的设计》一书由Martin Fowler、Kent Beck、John Brant、William Opdyke和Don Roberts等多位软件开发领域的专家共同撰写,首次出版于1999年,由Addison Wesley出版社发行。这本书是软件工程领域...

    Refactor pro

    1. **智能重构**:Refactor Pro提供了一系列智能重构操作,包括提取方法、提取变量、内联变量、重命名、移动和复制代码块等,这些功能能够帮助开发者快速调整代码结构,提高代码可读性和可维护性。 2. **代码分析**...

    js2-refactor.el, emacs的JavaScript重构库.zip

    js2-refactor.el, emacs的JavaScript重构库 js2-refactor.el emacs的JavaScript重构库。这是一个小型重构函数的Collection,以进一步了解从js2-mode开始的Emacs中的JavaScript IDE 。在 0.8.0中更改添加 e

    BuildSql Refactor

    【标题】"BuildSql Refactor" 是一个关于SQL构建和重构的工具或技术,它旨在提高数据库查询代码的效率和可维护性。SQL重构通常涉及优化查询语句、规范化数据库结构以及改善数据访问模式,以提升应用性能。在这个场景...

    重构-改善既有代码的设计

    《重构-改善既有代码的设计》是一本经典的编程书籍,作者是Martin Fowler,他在书中深入浅出地阐述了重构这一重要编程实践。重构是软件开发过程中不可或缺的一环,它旨在提高代码质量,提升软件的可读性、可维护性和...

    重构:改善既有代码的设计

    《重构:改善既有代码的设计》是一本由马丁·福勒(Martin Fowler)撰写的经典著作,专注于探讨如何通过重构技术来提升软件的质量和可维护性。这本书深入浅出地介绍了重构这一关键的软件开发实践,旨在帮助开发者们...

    重构 改善既有代码的设计 源码

    《重构:改善既有代码的设计》是一本经典的软件开发著作,由Martin Fowler撰写,它深入探讨了如何通过重构来提升代码质量、可读性和维护性。重构是软件开发过程中的一个重要环节,它涉及到在不改变软件外部行为的...

    重构-改善既有代码的设计(中文版)

    Chapter 1:Refactoring,a First Example 重构,第一个例子   The Starting Point 起点   The First Step in Refactoring 重构第一步   Decomposing and Redistributing the Statement Method 分解并重组...

Global site tag (gtag.js) - Google Analytics