iNCU App开发实践 - 技术选型篇

Posted by Lxxyx on 2017-04-02

不知不觉App已经上线快一个月了。而自己也总算结束了匆忙且无序的生活。生活节奏开始走向了正轨。
上个月说好的在博客更新iNCU项目中的点滴,也从这篇博客开始,慢慢的书写。
开发过程中,想的有点久,东西有点多。
今天就先从技术选型开始讲起。

主要技术

作为一个程序员,自然要把App中使用的开源技术,放到感谢的栏目中。
以下是App中核心的技术与框架。


技术选型の观点

关于技术选型,其实是一个老生常谈的问题。每个人都有各自的想法与观点。因为技术选型的观点不同而在社区引起争论的现象比比皆是。

于我而言,技术选型最重要的一点是:效用
效用在这儿指的是技术选型对整个项目/个人/团队所起的作用。
假如从这一点出发,便能避免很多不必要的问题与怀疑。

对项目的效用

首先则是对项目的效用,也就是要选用的技术对项目所起的作用与满足的需求。
一味追新,则可能经常性的碰见Breaking Changes,大部分时间都耗在弥补升级的坑上了。
一味保守,则可能出现效率不高,无法应付未来需求的问题。用jQuery当然很稳定,但是如果是大型SPA,则会出现力不从心的情况。

从iNCU项目本身而言,从技术层面出发,选用的都是偏稳定,生态繁荣,依旧在发展中的技术。
比如React Native,比如TypeScript,两者目前都是偏稳定的技术,一定时期内不会有太大的Breaking Changes,能稳定且持续的开发下去。

从需求层面出发,iNCU最好是能够发布Android与iOS版本,而目前团队移动端人手不足,短期内培养出移动端开发人员是个不现实的愿望。所以只能自己亲自上阵。
而我作为一个前端,技术选型上自然偏向了HTML5和RN。最后在评估几次需求与使用RN和HTML5(Cordova, ionic)写了好几个demo时,做出了最后的选择,RN。

对我而言,RN的优点如下:

  • 满足需求,能实现iOS/Android端的开发
  • 性能较强
  • 可拓展性强,后期可以通过原生拓展实现一些高级功能
  • 使用纯 JS + CSS Flexbox 语法编写,上手难度低,无语言切换成本

RN的缺点则是:

  • 团队目前前端主技术栈为 Vue,学习React的人比较少,后期维护可能会有问题。
  • RN仍不够稳定,一定时间后可能会出现较多的Breaking Changes,升级可能有障碍

再三权衡之下,选择了RN作为主开发框架。

对个人的效用

因为自己目前也只是一名学生,所以很看重技术选型给自己带来的效用。
换句话就是,选这个技术对自己的成长有什么帮助?或者能给自己带来什么?
带着这种想法去做技术选型,去学新技术,则会明确许多,而不是盲目的追新。

假使我已经能熟练运用Vue,理解Vue的思想与要解决的问题,那么下一个项目一定是React/Angular等未知领域的框架。
即使Vue用起来很方便,由于经验的积累,写起来也很快。但是对于个人成长而言,所起的作用已经不大,是时候去接触新的思想,新的框架,而不是继续留在舒适区。

这也是我在日常学习中很注重的一个方面:刻意练习。

在这种情况下,我选择了TypeScript作为自己的主开发语言,于我个人而言,TS的类型系统写起来很爽,也能让自己避免一些低级错误,还起到了基础的ESLint的作用,可谓是一箭三雕。
而事后也证明,熟练使用TS,让自己的开发效率大幅度提升,同时BUG数量比之前的少了很多。同时也能学到一些静态语言的知识。

另外一种情况则是自己选用的RxJS,整个项目中,就一个函数使用了RxJS,功能也很简单。

但是自己却觉得很划得来,因为RxJS的函数式写法很优雅,赏心悦目,看着就很开心。(对,为了开心😊)

至于自己对RxJS的作用和优劣,我在V2EX一个RxJS的问题中有回复:

前些天一直在学 Rx ,想引入项目后面还是放弃了。
目前看来 Rx 适合复杂的异步时间和数据流等,简单的小场景用 Rx 只是自己给自己找麻烦。而且 Rx 的侵入性特别强,基本上用了之后都是 Rx 那一套东西了。
最后贴一句前两天自己看到的一句话:不要为了 Rx 而 Rx 。

以上两个就是基于自身考虑的技术选型情况。
我从今年以来,一直有个想法,那就是掌握框架,或者说掌握哪个框架并不重要,掌握解决问题的方法,理解框架的本质,才是真正核心的。

对团队的效用

iNCU是个团队的项目,自然需要考虑后续维护的问题。
那么技术选型也应该是这样。
之前有在Redux + Redux-sagaRedux + RxJS + Redux-Observable中纠结很久,最后选择了目前最成熟的Redux + Redux-saga,无他,RxJS的侵入性和门槛太高了,不利于他们的后期学习与维护。
同时也是基于对应用场景的分析,不想为了 Rx 而 Rx 。,自己玩玩还行,但如果放在团队中,可能就容易坑到人了。

自己关于团队技术选型,观点则是:

引入技术是要解决实际问题的,引入的收益最好大于大家接受他的开销。否则是得不偿失。

结语

以上则是自己对于iNCU App的技术选型,和自己对于技术选型的一些思考和见解。
如果你有什么更好的看法,欢迎随时找我交流~