Java类库中一些反模式的API
2011-11-21 16:45
197 查看
了解和使用过JDBC类库的同学可能知道,ResultSet类有大量的getXXX和updateXXX方法,PreparedStatement类有大量的setXXX方法,是区分类型参数的方法,每一种新类型出现都会在所有这些接口中添加新的对应的方法,这不仅导致由于添加方法导致了接口不兼容的问题,还增加了类库维护者,JDBC驱动实现者的负担,而对用户没有过多的好处:
不仅如此,ResultSet类接口针对相同的类型还提供了诸如此类的方法,就是相同的方法名,参数不同:
而ResultSet类的子类RowSet也模仿了这类风格,提供了很多不同类型的set方法来设置参数。
虽然通过修改基于类型名称的方法名相比于overload是一种更好的风格,然而这种风格一旦滥用,将造成极大的困惑,事实上,通过提供一个类似ValueSetter这样的接口可以很好的解决这类问题,这个接口只是底层具体值的代理类,通过调用这个接口的各种方法来间接的维护底层的一些数据,也不暴露底层的实现细节,还不打破上层接口ResultSet的兼容性,而且这类对象能够在ResultSet类,PreparedStatement类或者有类似需求的子类中复用,而如果添加新的类型,维护人员只需要维护这一个类就行了。
short getShort(int columnIndex); int getInt(int columnIndex); void updateShort(int columnIndex, short x); void updateInt(int columnIndex, int x);
不仅如此,ResultSet类接口针对相同的类型还提供了诸如此类的方法,就是相同的方法名,参数不同:
short getShort(int columnIndex); short getShort(String columnName); void updateShort(int columnIndex, short x); void updateShort(String columnName, short x);
而ResultSet类的子类RowSet也模仿了这类风格,提供了很多不同类型的set方法来设置参数。
虽然通过修改基于类型名称的方法名相比于overload是一种更好的风格,然而这种风格一旦滥用,将造成极大的困惑,事实上,通过提供一个类似ValueSetter这样的接口可以很好的解决这类问题,这个接口只是底层具体值的代理类,通过调用这个接口的各种方法来间接的维护底层的一些数据,也不暴露底层的实现细节,还不打破上层接口ResultSet的兼容性,而且这类对象能够在ResultSet类,PreparedStatement类或者有类似需求的子类中复用,而如果添加新的类型,维护人员只需要维护这一个类就行了。
相关文章推荐
- Java 核心类库中的一些设计模式
- 记录java一些第三方优秀的类库
- SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库
- 从Java类库看设计模式
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记
- 如何在Eclipse中查看Java类库的源代码以及相应的api
- 从Java类库看设计模式2
- 从Java类库看设计模式(1)
- 如何在Eclipse中查看Java类库的源代码以及相应的api
- Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
- java实现打印功能的一些API
- 从Java类库看设计模式(1)
- 收藏的一些好用的Java类库
- 使用java类库中的Observable类和Observer接口实现观察者模式(精简版)
- Atitit. 衡量项目规模 ----包含的类的数量 .net java类库包含多少类 多少个api方法??
- 一些典型的XML的JAVA+API+(以备忘)
- Java常用类库——观察者设计模式(Observer接口、Observable类)
- 从Java类库看设计模式(2)
- Java 基础一些代码练习笔记(策略模式)
- 【Java常用类库】_观察者设计模式笔记