写点什么

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

  • 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:3413632
用户头像

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

关注

评论

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

【高并发】深入解析Callable接口

冰河

Java 并发编程 多线程 高并发 异步编程

【架构师训练营】模块七作业

樰巳-堕~Horry

架构实战营 「架构实战营」

云原生年度技术盘点出炉!乘风破浪正当时

阿里巴巴云原生

阿里云 云原生 年度盘点

设计模式【15】--从审批流中学习责任链模式

秦怀杂货店

Java 设计模式

Mybatis3 源码解析系列

Java mybatis

Linux系统编程-进程间通信(共享内存)

DS小龙哥

Linux 共享内存 2月月更

架构训练营模块二作业

苍狼

作业 模块二 架构训练营5期

Apache RocketMQ + Hudi 快速构建 Lakehouse

阿里巴巴云原生

阿里云 开源 云原生 消息队列

年度盘点|2021 年阿里云可观测实践回顾

阿里巴巴云原生

阿里云 云原生 可观测 Arms Arms 告警运维中心

MyBatis Demo 编写(2)结果映射转换处理

Java mybatis

MySQL RC事务隔离级别的实现

JavaEdge

2月月更

MyBatis3源码解析(5)查询结果处理

Java mybatis

MyBatis3源码解析(6)TypeHandler使用

Java mybatis

MyBatis3源码解析(7)TypeHandler注册与获取

Java mybatis

如何实现一个人管理1000个主播?

优秀

低代码 直播带货, 主播

如何做“健康码”的性能压测

阿里巴巴云原生

云原生 压测 健康码

MyBatis3源码解析(4)参数解析

Java mybatis

网络安全之小程序抓包渗透测试流程

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

MyBatis3源码解析(8)MyBatis与Spring的结合

Java mybatis

AI生明月,万里共文心

脑极体

一个cpp协程库的前世今生(二十六)共享栈

SkyFire

c++ cocpp

MyBatis3源码解析(3)查询语句执行

Java mybatis

人人都是 Serverless 架构师 | 弹幕应用开发实战

阿里巴巴云原生

阿里云 Serverless 架构 云原生

创新推出 | Serverless 调试大杀器:端云联调

阿里巴巴云原生

阿里云 Serverless 云原生 端云联调

MyBatis3源码解析(2)数据库连接

Java mybatis

SchedulerX 如何帮助用户解决分布式任务调度难题?

阿里巴巴云原生

阿里云 云原生 公有云 SchedulerX

性能分析之用户登录TPS低以及CPU被打满问题分析

zuozewei

性能分析 2月月更

《MySQL入门很轻松》第4章:数据表的创建修改删除

乌龟哥哥

数据库 2月月更

服务网格 ASM 年终总结:最终用户如何使用服务网格?

阿里巴巴云原生

阿里云 云原生 服务网格 容器服务

MyBatis Demo 编写(1)基础功能搭建

Java mybatis

Kubernetes集群统一日志管理方案(Elasticsearch+Filebeat+Kibana+Metricbeat)搭建教程

山河已无恙

Kubernetes 2月月更

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