@pockry
2015-04-16T20:22:04.000000Z
字数 2384
阅读 1943
移动
移动开发
MVC
架构
摘要:4月12日,InfoQ社区编辑俱乐部第二次线下聚会在中关村创业大街某咖啡馆举行。本次活动讨论的主题为移动开发中的痛点。包括缺乏最佳实践、对MVC架构划分的理解、Web开发技术再次引起争夺等。以下是对讨论中的重点总结。
4月12日,InfoQ社区编辑俱乐部第二次线下聚会在中关村创业大街某咖啡馆举行。本次活动讨论的主题为移动开发中的痛点,除了InfoQ社区编辑唐巧、郭亮来到现场以外,还有郭虹宇、邓宇光、代码家等国内知名移动开发者也参加了活动。以下是对讨论中的重点总结:
在Github有3.5K+关注者的代码家首先表示,移动开发,特别是Android开发至今缺乏最佳实践,很多类和接口有多种实现方式,大家都按自己熟悉或喜欢的模式来进行开发,导致要想读懂别人的代码很费劲,后续维护起来更是个大问题。
代码家本人想到的解决方案是推出一个轻量级框架,使用这个框架,大家都遵循同一套模式,同时还能缩减代码量,防止重复劳动,这个框架仍在开发中,代码家表示将于近期开源。
iOS开源大牛郭虹宇表示,他的想法和代码家不谋而合。在他看来,移动开发团队如果达到一定规模,最好的做法是先做框架,然后基于框架再来开发。这样能在团队内统一认识,开发出的代码更容易维护。但这样也有缺点,就是框架的学习也有一定成本,另外框架的维护困难,如果框架很复杂的话,一旦开发框架的人离开,这个框架的生命也基本上就结束了。
百度的iOS开发工程师孙源也遇到了类似的问题,作为一个有着轻微代码洁癖的人,难以忍受代码风格不同,虽然很多代码风格问题可以通过遵守编码规范来解决,但还是有一些细节问题是编码规范所关注不到的,比如方法名和参数之间的空格等。孙源的解决方法是写一个Xcode插件,能够从编译层面对代码语法树进行分析,从而标记出代码风格不同的地方,这个插件也将开源出来。
猿题库iOS研发工程师唐巧表示,对于这样的情况,其实还可以用代码审查来解决,。使用gerrit搭建代码审查环境,在执行中贯彻下去,猿题库就采用了这套系统,取得了不错的效果。
郭虹宇表示,他在面试开发者时经常问的一个问题是,哪些东西属于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非常接近。
最近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带来的影响,对遗留代码进行重构的最佳时机等话题,直到活动结束,大家仍然意犹未尽,期待有更多的机会大家能够聚在一起。