技术点的比较,是技术讲解类文章的延伸。下面以高嘉峻的《对比iOS网络组件:AFNetworking VS ASIHTTPRequest》一文为范例介绍本类文章的撰写重点。

选择什么技术点

  • 你觉得好用的或值得关注的,必须要让InfoQ的读者们——即一线架构师、开发者、软件项目管理人员们——知道的
  • 能够在8000字以内深入细节说明白的——选题太大则需要拆分,选题太小则不足以成文
  • 有可比性的,比如处于竞争关系的技术,或者功能类似的技术

标题

一句话介绍本文要对比的几个技术点名称。

第一部分:背景介绍

这几个技术点都是什么?是为了解决什么问题?各自是谁提出或研发的?研发的时代背景或应用场景是什么?这个领域下是否还有其他的技术,为啥选择这几个来做比较?本文要对它们的哪些方面进行比较,为什么要比较这几个点?

在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题。一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性。这些组件把复杂的网络底层操作封装成友好的类和方法,并且加入异常处理等。

那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?几乎每一个iOS互联网应用开发者都会面对这样的选择题,要从这两个最常用的组件里选出一个好的还真不是那么容易。

单单从两个控件版本提交的时间节点来看,AFN的第一个提交是2011年的1月1日,那个时候ASI早已是1.8+的版本了;而当AFN发布1.0版,2012年10月份的时候,ASI早早的已经停止更新了。这样看起来,AFN是ASI的继任者,似乎不存在之前提到的选择困难的问题,而事实并非如此。本文将从用法、功能、性能和原理几个方面对二者进行简单对比,看看二者之间到底存在着怎样的区别,到底应该如何选择。

第二部分:每一项的对比

我是怎么做的对比?是直接比较代码、比较参数、比较检测结果或是别的什么比较项?技术A在这项上是怎样的?技术B在这项上又有怎样的表现?是有差异还是没差异?差异在哪里?这个差异会导致怎样的结果?这个差异将如何影响我们对它的选择?

AFN官方推荐的使用方法是……

ASI推荐使用方法就非常传统……

对比两段代码可以很清楚的看出,同样是发起一个最普通的异步请求,使用AFN只需要调用一个静态方法,但代码可读性较差;而ASI的示例看起来更清晰,但需要调用多个实例方法才能完成一次请求。AFN的设计更加工程化,或者说对使用者更友好,而ASI的设计更经典,典型的OOP。

对比一项之后,引入下一项,直到完成最后一个对比项。

第三部分:总结

所有这些项目比较下来,技术A和技术B的特点各自是什么?技术A更适用于哪个场景,技术B更适用于哪个场景?从作者的项目经验,进行了怎样的选择?有没有相关的资料可以提供给读者?

通过以上的对比,基本可以这样评价:AFN适合逻辑简单的应用,或者更适合开发资源尚不丰富的团队,因为AFN的易用性要比ASI好很多,而这样的应用(或团队)对底层网络控件的定制化要求也非常低。ASI更适合已经发展了一段时间的应用,或者开发资源相对丰富的团队,因为往往这些团队(或他们的应用)已经积累了一定的经验,无论是产品上还是技术上的。需求复杂度就是在这种时候高起来,而且底层订制的需求也越来越多,此时AFN就很难满足需求,需要牺牲一定的易用性,使用ASI作为网络底层控件。SegmentFault开源客户端现在被设计为一款简单的阅读客户端,几乎没有定制要求,因此,目前我选择了AFN作为网络控件。

以上对ASI和AFN两款最常用的iOS底层网络控件做了初步的介绍,要更深入的了解两款控件,还需要大家继续研究各自的源码。大家遇到任何关于iOS的技术问题都可以在http://segmentfault.com/t/ios进行讨论。另外大家也可以持续关注SegmentFault的开源客户端,与更多的开发者共同探讨iOS开发技术。

更多范文