callbackHandler.processRow(rs);
}
rs.close();
ps.close();
}
catch (SQLException ex) {
throw this.exceptionTranslater.translate("JdbcTemplate.query(sql)", sql, ex);
}
finally {
DataSourceUtils.closeConnectionIfNecessary(this.dataSource, con);
}
}
首先(1处),代码利用DataSourceUtils从dataSource中获得一个可用的连接,然后使用PrepareStatement的方式处理查询语句。2处是整段程序的精华,代码使用了一个回调接口,把从数据库中取出的记录集交给回调接口来处理。我们把这里的代码和前面的客户端代码结合起来看,就能够明白它的思路。3处用于处理异常,将SQLException转义为更具有意义的异常,即DataAccessException的子类,因为单单靠一个SQLException来表示复杂的数据库操作异常未免过于简单了。最后(4处),不管执行的结果如何,都关闭连接。
应该说,这一段代码并不难理解。但它充分表现了框架的工作方式和以下我们将谈到的框架的意义。
框架对软件开发的意义
知识积累
框架的核心价值是对知识的积累。软件开发是一项知识性的活动。但是知识存在于人的大脑中,是最难进行积累的。而在软件开发中,代码是最确定的知识,人和机器通过浏览代码都能够了解代码的目的,而且不会出现不同的理解。所以,从代码出发进行知识的积累是最佳的办法。框架就是这种思路的产出物。框架包含了大量的代码,这些代码是对某个特定问题领域中抽象概念及这些抽象概念之间关系的描述。所以,框架能够胜任知识积累的工作。
虽然代码是框架的核心,但是光有代码的框架是很难为人所理解的。代码的层次太低,开发人员从代码的角度来完全的理解框架是很困难的。所以,必须要有层次高于代码的工件。这些工件可以是设计文档、领域模型、UML图、JavaDoc。他们的目的都是为了帮助框架的开发人员和使用人员顺利的理解框架。
就像我们上面的实例中,通过一个JdbcTemplate对象,就将一个JDBC的最佳实践给积累起来了。当然,你也可以使用文档要求开发人员按照某种方式来使用JDBC,但在实践中会遇到不少的问题,例如,JDBC的异常处理可能过于繁琐而被忽略。虽然大多数时候都不会有问题,但是当问题发生时往往会很麻烦。采用框架的方式则不会有类似的问题。
文章来源于领测软件测试网 https://www.ltesting.net/