接上回:
:我们可以Extract Method(提炼函数)啊,只要把重复部分提炼出来就ok了.
:别把问题想的太简单,你看这两个函数,主要是在返回的地方不同,没办法直接提炼,我们应该使用模板方法模式.
:我们已经使用了模板方法模式了,现在要再次引入模板方法模式,不觉得太复杂了吗? :的确这样,看来我们给这个类赋予了过多职责.
:嗯,我们把查询的功能分离出去吧,只剩下构造SQL的职责就没问题了
public abstract class SimplePagingQueryJdbcTemplate{
public static final Pattern fromPattern = Pattern.compile("from",Pattern.CASE_INSENSITIVE);
public static final String countSQLHead = "select count(*) from ";
public static final Pattern orderByPattern = Pattern.compile("order(\\s)+by",Pattern.CASE_INSENSITIVE);
public static final Pattern selectPattern = Pattern.compile("select",Pattern.CASE_INSENSITIVE);
public void prepareQuery(SimpleQuery query,Pager pager) {
query.setQuerySQL(createPagingQuerySQL(query.getQuerySQL(), pager.getFirstResult(), pager.getPageSize()));
}
public void prepareCount(SimpleQuery query) {
query.setCountSQL(createCountSQL(query.getQuerySQL()));
}
private String createCountSQL(String querySQL){
String[] SQLParts = fromPattern.split(querySQL, 2);
if(SQLParts.length!=2){
throw new IllegalArgumentException("The SQL query maybe miss the word \"from\".");
}
String countSQLbody = cutLastOrderBy(SQLParts[1])[0];
return countSQLHead+countSQLbody;
}
protected String[] cutLastOrderBy(String sql){
Matcher matcher = orderByPattern.matcher(sql);
if(!matcher.find()){
return new String[]{sql,null};
}
int orderByIndex = matcher.start();
while(matcher.find()){
orderByIndex = matcher.start();
}
return new String[] {sql.substring(0,orderByIndex),sql.substring(orderByIndex)};
}
protected abstract String createPagingQuerySQL(String querySQL, long firstResult, int maxResult);
}
:现在清爽多了,连原来的重复代码都消除了
分享到:
相关推荐
重构----改善既有代码的设计(完整中文扫描版PDF)
重构----改善既有代码的设计(By Martin Fowler) 非常经典的一本书!
相空间重构C-C法,含数据 。。
重构----改善既有代码的设计 怎么写好一个类,怎么重构已有代码,运用多中重构代码的方法,去改善代码结构。
西南科技大学软件设计模式与重构大作业-心算大师游戏(高分作业)
重构不是一项靠着天分挥洒的艺术,而是一项工程。重构是一种有纪律的,经过训练的,有条不紊的程序整理方案,可以将整理过程中不小心引入错误的机率降到最低
重构(1-6).pdf 1-6章
重构---改善既有代码的设计。Java程序员必读书籍之一。
是一个非常好的讲解重构的资料,简单可读,容易理解,值得朋友们参考
Percona pt-archiver重构版--大表数据归档工具.zip
重构与模式-中文扫描版http://product.china-pub.com/32561
参考资料-云服务重构新零售--2017阿里巴巴商业服务生态白皮书.zip
本书讲述重构,即在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
疫后新格局:从重启到重构-20210209-中金公司-16页.pdf
重构--Ruby实现,Martin-Fowler参与编写,质量很高
安防行业深度报告:技术创新与格局重构-0408-光大证券-45页.pdf
java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版
新消费行业专题分析报告:2022,“新消费”重构再出发-国金证券-20220110.pdf