写点什么

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

  • 2015-04-16
  • 本文字数:2225 字

    阅读完需:约 7 分钟

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2015-04-16 08:3414015
用户头像

发布了 164 篇内容, 共 113.7 次阅读, 收获喜欢 392 次。

关注

评论

发布
暂无评论
发现更多内容

Python动态属性有什么用

和牛

测试

元宇宙浪潮震撼来袭,抓住时机,齐心协力

CECBC

Ansible项目最佳实践

穿过生命散发芬芳

ansible 7月月更

知识分享|分享一些提升企业文档管理水平的方法

Baklib

经验分享|企业该怎样利用SaaS进行企业知识管理

Baklib

振奋人心!元宇宙!下一代互联网的财富风口

CECBC

音频的价值、AI Codec 的意义与算法能力的边界丨一期一会 • 音频工程师专场

声网

音频技术 一期一会

图的基本定义和概念(二)

乔乔

7月月更

在线XML转CSV工具

入门小站

工具

【Docker 那些事儿】初始 Kubernetes 容器管理平台(下)

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

Envoy分布式链路追踪

阿泽🧸

envoy 7月月更

网信办严厉查处诱导未成年人参与直播打赏行为:直播打赏行业乱象必须整治

石头IT视角

有return的情况下try catch finally的执行顺序

技术小生

7月月更

中国经济网:“元宇宙”炙手可热

CECBC

传统企业的办公模式正在发生着变化,为什么企业需要数字化办公?

BeeWorks

优必选科技眼中的AI机器人时代

优必选科技

AI 机器人

京东云分布式链路追踪在金融场景的最佳实践

京东科技开发者

数据库 分布式 京东云 云计算,

什么是云渲染?渲染速度有多快?一文告诉你

Finovy Cloud

计算机 云渲染 集群渲染

快速搭建个人博客网站——Hexo

空城机

Hexo 个人博客 7月月更

Vue Cli Study

程序员海军

vuecli 7月月更

鼓励企业知识共享的好处,你知道多少?

Geek_da0866

API策略因何成为企业数字化转型的制胜法宝?

BeeWorks

linux 上查找包含特定文本的所有文件

入门小站

Linux

等额本金递增还款/等额本金递减按揭房贷还款计算器

入门小站

工具

Elephant Swap的LaaS方案优势分析,致eToken表现强势

BlockChain先知

无套路、无陷阱、无广告 | 这个免费的即时通讯软件确定不用吗?

BeeWorks

行业洞察|如何更好地建设数据中台?IT和业务要“齐步走”

BeeWorks

如何在OneFlow中新增算子

OneFlow

深度学习 算子

向量化引擎对HTAP的价值与技术思考

OceanBase 数据库

oceanbase

N分钟学会分位值的计算方式

眼镜盒子

指标

G1GC算法读书笔记(更新中)

老猎人

座谈会:移动开发中的痛点_移动_徐川_InfoQ精选文章