还是自己去年写的一篇老文章,今天又拿出来看了一下,感觉最近一年在技术方面所做的沉淀,的确都是围绕着这些维度在展开,所以,后面自己的沉淀总结,也打算以这个作为骨架了:
经常会遇到一些同学,说无线客户端开发没啥的,就那些事儿,调调API、搭搭界面、搞搞缓存,半年就熟手了。这时我会问他,那你能告诉我怎样才能开发一个一流的客户端呢?也有一些涉足无线开发不久的同学,也会来问我这个问题,怎样做才能开发出一流的客户端。其实这是一个很复杂的问题,我也给不出标准的答案,但是这又切切实实是我们需要达到的目标,所以,我们必须要把这个复杂的问题细化开,让每一个有志于开发一流无线客户端的同学或者团队,能够看到一些达到目标的阶梯,因此,我们就有了这个“塔基”项目的想法,希望通过已有的经验积累和后续的努力,让这个宏伟的目标变成一步一步可具体实施的步骤。塔基,寓意为“基有多深,塔就能多高”。
从技术的角度出发,我们把塔基项目分解为8个部分,期望从8个不同的维度,来细化开发一流客户端所必须的技术内功:
- l 代码规范(怎样写代码)
- l 设计要领(如何做设计)
- l 工具集合(装备是重要的)
- l 测试评估(质量不能凭感觉)
- l 容错降级(任何错误都是必然的)
- l 发布升级(如何送达用户)
- l 统计监控(上线不是最后一步)
- l 安全风控(安全无小事)
1. 代码规范:
怎样写代码?这个问题不需要我们来回答,对于每一个开发工程师,都有自己的答案,但是,对于一个团队,一个产品项目组,有没有一个共同的答案呢?代码是一座建筑最基础的砖石,如果这些砖石都形状各异,就算每一块都坚固不摧,搭起的建筑也是岌岌可危。所以,代码规范不止是让代码美观一致,更重要的也是有序的协调所有人的代码,解决契合的问题。
需要一份简炼的基础代码规范,作为每个人必须遵守的原则(长了不好执行),包括工程的结构、代码的组织、命名等等。另外,还需要针对不同的主题,提供一些最佳实践,比如如何处理内存警告,如何预防循环引用等。这些很多都是大家平时的经验之谈,需要持续的积累。
2. 设计要领:
如何做设计?设计可大可小,大到整体框架,也可以小到一个简单的设计模式,思路方法众多,但是一些基本的原则,是可以有章可循的。比如如何降低模块间的耦合性,为什么主张接口依赖而不是调用依赖,单例模式有什么好处,适合用在哪些场景。同时,针对内存管理、并发管理、存储管理等专题可以提供一些总结沉淀、原则和最佳实践。当然,也可以有一些针对弱网络环境下的设计要领、界面调优、性能优化等专题内容。
3. 工具集合:
装备是重要的!利用工具,可以大大提高我们的开发效率和质量。工具在整个产品过程中,都可以起到很大的作用,包括代码的分析和管理,对产品质量的各个维度测试评估,辅助调试,复杂环境的模拟等等。工具,并不是一定要自己来造,在业界已经有很多有用的工具和系统,我们所需要的,是将它们按用途收集整理出来。另外,对于一些特定场景和用途的工具,也许需要我们自己来开发,比如,现在我们就已经积累了一些很好的基于日志的分析线上crash问题的工具。
4. 测试评估:
质量不能凭感觉。怎样的应用才能认为是好的?我们的客户端算不算是业界的一流?我们和真正的一流客户端到底有多大差距,哪些地方还有比较大的提升空间?这些都依赖我们的测试和评估能力。让每个人都知道如何去评估一个客户端的好坏,如何从不同的维度去衡量,并且建立各个维度的标准指标,这样,才能让我们对我们的应用有底气的去客观评价,知道“天高地厚”,明白自己该努力的方向。要做到这样,同样需要有足够的工具来帮助我们进行测试和评估,包括在稳定性、性能、内存消耗、存储消耗、流量、电量、兼容性、后台生命力等等方面。
5. 容错降级:
任何错误都是必然的。对于一个拥有一定量级用户的客户端,由于网络、手机环境的复杂性,以及客户端和服务端的不同步,任何的错误在线上都是会必然发生的,所以,客户端的容错处理能力,就代表了你应用的线上稳定性。
同样,不管发生了什么样的错误,都应该保障你的应用能够“有底线”的处理。什么是底线?不crash,不阻塞主要功能,不引起界面错乱……,这就需要不管出现任何错误的情况下,都能有相应的降级方案。
6. 发布升级:
如何送达用户?由于客户端升级周期的特性,应用的发布和升级也是一个复杂的过程,如何管理众多的渠道包,如何进行灰度发布,如何进行强制升级,如何维护发布账户,如何进行动态部署和更新,等等问题,都是要确保让正确的版本及时的送到相应的用户手上。
7. 统计监控:
上线不是最后一步。你的应用在用户手中到底使用状况如何?哪些功能最受欢迎,哪些页面通常都是用户使用的终点,哪些模块最容易crash,等等这些统计信息,你都需要去掌握,这样才能持续的进行优化和改进。
另外,如何知道你的客户端在用户手上出了问题,是等着在APP store上骂声一片呢,还是等到用户的投诉纷至,这时,其实已经有点晚了。所以,一套客户端线上监控体系,也是非常必要的,通过收集线上的异常反馈,可以及时的将异常信息通过邮件、短信等方式,自动的通知到相关人员。
还有如何主动的收集用户反馈,如何建立线上调试的机制等,都是对持续的改进应用非常有帮助的。
8. 安全风控:
安全无小事儿。但是在无线开荒拓界的这个特殊阶段里,大多的客户端产品都将重心放在业务的建立和产品功能上,很少会考虑到客户端本身的安全问题。然而,由于客户端产品的特殊性,更新周期漫长,对于已发布出去的产品很难再掌控,所以,一旦后期安全问题爆发,往往后果严重,并且需要漫长的时间进行修复,在这期间仍然只能任人摆布(除非自己把应用下线),让产品背上沉重的历史包袱。所以,安全风控的意识,一定要从一开始就建立起来,从代码的规范,到数据的保密、通信的保护、放篡改等等。
说了这么多,感觉是搭了一个很漂亮的“花架子”,还没看到什么“干货”哦。好吧,我想说,我们今天就是想来搭架子的,有了架子,就容易找东西了。架子上的宝贝,就靠你我大家,接下来一起来携手贡献了。我有架子,你有宝贝吗?