/pigeon-sample

pigeon框架使用例子

Primary LanguageJava

作为开源语言java的开发者一直想为开源社区做一点贡献,在枯燥乏味的工作之余我热衷于通过框架的方案解决重复性和没技术含量的冗余代码让开发人员更关心业务的逻辑而不是为无谓的功能写千百行重复的代码.不但使得工作效率低下而且代码臃肿和晦涩难懂.更加难以忍受的是类似的功能我们只能重复一遍一遍的写着重复度很高的代码导致对原本很美妙的编码生活变得枯燥无味.

我们都知道现在流行的移动平台主要有两个:1.Android 2.IOS Android主要开发语言是Java而IOS的主要开发语言是Objective-C(先不考虑Swift),后台使用的语言有很多种例如Java,PHP,.net等等.移动开发离不开后台,通过网络与后台进行数据交互是必须的.通常情况下我们后台例如采用Java作为开发语言就会用SpringMVC类似的框架搭建一个RESTful服务供两大移动平台调用.数据格式采用JSON或者XML比较多,网络协议基本上都采用HTTP.所以总结起来一般中小型公司都采用HTTP+JSON/XML作为主要交互技术.

当然这种交互的技术相当的成熟但弊端也很明显,作为一线开发人员我们一定会感觉到这种方式让编码看起来并不直观而且重复的代码很多.尤其在Android平台中网络交互必须在子线程执行而UI操作又必须在主线程执行,如果不用专门的HTTP异步通讯框架来封装的话我们必须写很多AsyncTask然后在doInBackground中进行网络请求然后在PostExecuted中进行UI更新.而且最大的弊端在于前端开发人员要和后端开发人员保证及时良好的沟通不然的话就要在开发文档中将每个服务方法的 功能/URL路径/参数类型/返回值类型/异常情况 描述的相当清楚.否则前端开发人员很难清楚该调用哪个路径和传递什么样的参数...

举个例子:用户通过移动端下订单 一个订单包含配送地址,物流方式和多个订单项... 一个订单项包含一个产品,型号,颜色,数量...

假如采用GET请求的话我们可以想象一下这个路径的参数要拼接的很长而且每个参数的名称都不能写错而且订单项有多个这种时候怎么拼接呢? 当然一般情况下我们会采用POST的方式进行请求,我们会构造好一个JSON对象,因为JSON对象可以轻松包含一个数组类型的JSON看起来比GET方式是简单很多 更好的方式是后台定义好VO类型再将VO类型打包成jar包提供给Android平台使用,这样就能避免自己构造JSON对象了也能避免写错属性名称,但是IOS平台和Jave后台是不同语言的,这个时候IOS端不得不写一套跟后台一样的VO类型,用VO类型封装好请求参数序列化成JSON或者XML通过HTTP工具发送POST请求到后台接收JSON/XML类型的返回结果再封装成对应的VO类型最后做界面更新,这个过程繁琐而且容易出错调试的成本也很高.就算用哪种方式都避免不了数据的序列化/反序列化,子线程/主线程的切换. 在这里我们深入再思考一下这个问题,假如我们需要添加对用户下订单这个数据在传输过程中加密/解密 签名/验签 这个功能呢?是不是本来就和业务不太相关的代码一下子变得很多很复杂? 因为我们的核心业务是下订单而不是序列化/反序列化 加密/解密 签名/验签...

基于上述陈列的事实和存在的问题,我开始思考能否设计一个框架帮我们去做这些事情,让我们在跟后台进行数据交互的时候就像在调用本地的代码一样,免去我们去关心网络传输/对象序列化/加密/签名...这些复杂又臃肿的代码呢?

我们可能第一时间会想到,用RMI就行啦.如果我们只有Android端而且后台使用Java的话,这样是没任何问题的.但是RMI并不支持IOS. 这时我们会想要不用WebService也行.是可以!但是我们真的想在Android和IOS中用WebService这种重量级框架吗?不但配置起来麻烦用起来也相当的复杂.