座谈会:移动开发中的痛点

阅读数:10456 2015 年 4 月 16 日

4 月 12 日,InfoQ 社区编辑俱乐部第二次线下聚会在中关村创业大街某咖啡馆举行。本次活动讨论的主题为移动开发中的痛点,除了 InfoQ 社区编辑唐巧、郭亮来到现场以外,还有郭虹宇、邓宇光、代码家等国内知名移动开发者也参加了活动。以下是对讨论中的重点总结:

痛点一:缺乏最佳实践

在 Github 有 3.5K+ 关注者的代码家首先表示,移动开发,特别是 Android 开发至今缺乏最佳实践,很多类和接口有多种实现方式,大家都按自己熟悉或喜欢的模式来进行开发,导致要想读懂别人的代码很费劲,后续维护起来更是个大问题。

代码家本人想到的解决方案是推出一个轻量级框架,使用这个框架,大家都遵循同一套模式,同时还能缩减代码量,防止重复劳动,这个框架仍在开发中,代码家表示将于近期开源。

iOS 开源大牛郭虹宇表示,他的想法和代码家不谋而合。在他看来,移动开发团队如果达到一定规模,最好的做法是先做框架,然后基于框架再来开发。这样能在团队内统一认识,开发出的代码更容易维护。但这样也有缺点,就是框架的学习也有一定成本,另外框架的维护困难,如果框架很复杂的话,一旦开发框架的人离开,这个框架的生命也基本上就结束了。

百度的 iOS 开发工程师孙源也遇到了类似的问题,作为一个有着轻微代码洁癖的人,难以忍受代码风格不同,虽然很多代码风格问题可以通过遵守编码规范来解决,但还是有一些细节问题是编码规范所关注不到的,比如方法名和参数之间的空格等。孙源的解决方法是写一个 Xcode 插件,能够从编译层面对代码语法树进行分析,从而标记出代码风格不同的地方,这个插件也将开源出来。

猿题库 iOS 研发工程师唐巧表示,对于这样的情况,其实还可以用代码审查来解决。使用gerrit搭建代码审查环境,在执行中贯彻下去,猿题库就采用了这套系统,取得了不错的效果。

痛点二: 对 MVC 架构划分的理解

郭虹宇表示,他在面试开发者时经常问的一个问题是,哪些东西属于 Controller,而得到令人满意的回答很少。事实上,在 iOS 开发中,View 和 Controller 分的并不是特别清楚,郭虹宇认为在 iOS 开发中并没有什么 View 和 Controller,只有 Model+ViewController,如果对 MVC 架构理解不深入、或者团队里对 MVC 的理解有差异的话,很容易写出臃肿的 ViewController,以及出现痛点一中的实现方式混乱,给代码维护带来麻烦。郭虹宇的解决方法是通过框架在上层实现 View 和 Controller 分离,同时引入大家熟悉的 HTML+CSS 来做 MVC,尽量降低使用者的学习成本,这就是他的新框架samurai Native的由来,这个框架已经开源,并且他还将在QCon 北京上分享开发这款框架的一些想法。

对 MVC 架构划分的理解的不一致,不仅仅会反映在应用的架构上,还会带来其它问题。百度研发工程师邓宇光分享道,如果应用的 UI 组件很多,并且相互之间有复杂的通信逻辑,在多人维护的情况下,很容易造成通知的滥用,最后变得无法维护。比如一个通知可能有多个接收者,需要刷新多个 View 界面,但在多人维护情况下,很可能会发生遗漏、重复调用等问题。他的解决方案是使用 KVO 或者观察者模式,让 View 去观察一个统一的 model,获取改变后刷新整个 UI。事实上,这个思路和 React 非常接近。

痛点三:移动开发往哪儿去,前端还是 Native?

最近 Facebook 开源了React Native的 iOS 版本,一石激起千层浪,在移动开发者群体中引起了巨大的反响。在聚会现场大家围绕着它也展开了激烈的讨论。

React Native 所代表的 Web 开发 Native App 技术,解决了移动开发中的很多痛点,比如唐巧提到的 App Store 审核周期过长的问题,使用 Web 更新机制可以很好的解决。另外还有跨平台问题,iOS 平台和 Android 平台都难以放弃,Web 开发的代码也可以很好的复用,降低了开发成本。

郭虹宇认为,无论是近来的 NativeScript 还是 React Native,都是将 Web 开发技术引入到 Native 开发。在过去,移动开发中的 Web 与 Native 之争基本以 Native 的胜利而告终,因为 Web UI 的性能是无法与原生相提并论的。即使目前手机性能有了巨大提升,但在 UI 交互等方面 Web UI 还是远远不如原生 UI。而现在的这些新框架虽然引入了 Web 开发,但同时采取了原生 UI,从而在某种程度上避免了 UI 性能问题。React Native 的意义除了它本身之外,还在于 Facebook 以它巨大的影响力,将一大批前端开发者带入了移动开发的战场。而从此以后公司在进行移动开发技术选型时会面临抉择:到底是使用前端技术还是 Native 开发技术?到底是招聘前端开发者还是移动开发者?生存环境被挤压, 这是摆在所有移动开发者面前的问题。

不过,唐巧认为,这个问题没那么严重。每个移动平台都有各自的交互规范,用 Web 技术开发移动 App 也必须要遵循这些规范。而 UI 交互的开发占据 App 开发的很大一部分内容,因此即使是用 Web 技术开发 Native App,也必须学习 Native 开发,并且整个 App 开发还是需要 Native 开发的参与。另外他也提到,移动开发者其实可以趁这个机会学习前端技能,这样未来不局限于移动开发,道路更加宽广。

除了这些之外,现场还讨论了移动安全,Go 语言进入 Android 和 iOS 带来的影响,对遗留代码进行重构的最佳时机等话题。直到活动结束,大家仍然意犹未尽,感谢 OneAPM 对本次活动的支持,期待有更多的机会大家能够聚在一起。


感谢唐巧对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流。

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论