现在的位置: 首页 > 综合 > 正文

挑战淘宝:且看如何用1500行搞定淘宝20000行Java SDK(1)

2012年12月17日 ⁄ 综合 ⁄ 共 3954字 ⁄ 字号 评论关闭

         挑战淘宝:且看如何用1500行搞定淘宝20000行Java SDK

继亚马逊、雅虎、Google等一众知名大公司掀起了开放API的潮流后,淘宝也不甘寂寞,于2009推出了TOP平台,搭上了这趟开放API的顺风车(详细请看http://open.taobao.com/)。

为了更好的开发TOP程序,淘宝提供了各种语言的SDK,其中自然少不了编程语言老大JavaSDK。但不幸的是,当我兴致勃勃的将SDK下载下来,准备大干一场的时候,却发现淘宝的Java SDK只是“看上去很美”,用起来却很不爽。

让我们分析淘宝给的样例来看看究竟是什么不爽。

如下是淘宝给的API调用样例(详见:http://wiki.open.taobao.com/index.php/FAQ#SDK):   

我们基于这个样例来看淘宝Java SDK的调用机制:

1)  创建一个TaobaoJsonRestClient对象,此对象负责完成TOP API调用

2)  生成一个API请求对象:ItemGetRequest,设置API调用参数

3)  获得一个API响应对象:ItemGetResponse,此对象由TaobaoJsonRestClient生成

4  ItemGetResponse中通过TaobaoItemJSONConvert获取最终的对象;

 

样例来看,淘宝的SDK调用机制也没有什么问题:采用面向对象,请求和响应隔离。不过如果你打开SDK的源代码、或者亲自调用几个API体验一下,就会发现淘宝SDK中的实现机制存在如下问题:

1)绝大部分代码是非常相似、非常简单的属性定义和操作

API相关的类有:请求类、响应类、结果类、转换类,但不同的API这些类都非常类似,都是属性定义、属性get/set操作。我们来看源代码(由于代码太多,省略了绝大部分相似的代码):

==========================================

Item结果类:

 

=====================================================================

Trade类:          

      

2)设计与实现没有分离,每个API都要设计4个不同的类,导致代码量非常庞大

我们以SDK的样例来进行分析,分析内容请看代码注释:

用代码统计工具统计,代码量是21296行代码;加上大部分代码相似,很难阅读。 

3API的任何变更,SDK都必须更新,开发者也必须相应更新,耦合联动关系很强

例如:ItemGetRequestsetIid修改为setIID,那么所有使用了setIid的地方都必须修改,然后重新编译。

又如:如果在SDK2.0中某个API增加一个参数,或者增加了新的API,而你又必须使用的话,那么就必须切换到SDK2.0,这个切换可不是改个名字或者增删一行代码那么简单,你需要将原来的jar包删除,然后倒入新的jar包,然后再到SDK2.0中找到对应的API,还要寄希望于淘宝不要把其它API相关对象的定义给改了。

 

    加上淘宝有的代码并没有开放,如果一旦出问题,调试和修改几乎不可能的。基于这些原因,我决定自己动手建立一套比淘宝SDK更简单、更容易理解和使用的调用机制。

==========================未完待续,欲知如何设计,请看下回分解================

 

抱歉!评论已关闭.