BT

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

作者 徐川 发布于 2015年4月16日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!

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账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论
提供反馈
错误报告
商务合作
内容合作
Marketing
InfoQ.com及所有内容,版权所有 © 2006-2016 C4Media Inc. InfoQ.com 服务器由 Contegix提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司 京ICP备09022563号-7 隐私政策
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.