美文网首页玩转编程
Life is short, you need Kotlin

Life is short, you need Kotlin

作者: 欧阳锋 | 来源:发表于2017-07-03 00:06 被阅读5331次
    Bruce Ckel said: "Life is short, you need Python". 
    But today , i want to say: 
    Life is short , try Kotlin.
    

    千呼万唤始出来,犹抱琵琶半遮面。
    直到今天,我的全Kotlin语言开发的APP吆鸡理财终于上线了,突然有一种如释重负的感觉。目前APP已经在应用宝正式上线,大家可以扫描下方二维码下载体验!


    吆鸡理财

    框架诞生

    这个应用框架的前身是来自于我在OSChina的Android应用框架android-architecture,当时接到这个需求的时候,框架还在开发当中。临危受命,只能迅速调整战略,快速解决紧急需求,逐步迭代,最终形成了吆鸡理财现在的框架设计。

    下面我们一起来分析一下应用整体的框架设计,以及需要改进的地方!

    应用架构

    应用架构

    框架的整体设计依然是一个非常经典的MVP结构,MVP结构因为不是谷歌默认官方框架。在框架的约束方面比较难以控制,为了实现整体统一的代码结构,在UI层新增了一个Presenter便捷处理基类BasePresenterActivity,继承自该类,可以实现如下三个目标:
    1)自动创建Presenter
    2)自动实现内存回收
    3)方便绑定View

    即使这样,团队中依然会存在一些“极端分子”不遵守规范,写的五花八门。为了更进一步约束安卓团队的代码,我增加了一个完整的规范文档,并且使用PR的方式合并代码,从而有效地避免了不和谐的代码提交。

    上面的应用架构图准确地展示了整个应用的框架结构,图中闭环曲线标注了View层之间的通信方式,为了便捷使用了EventBus。push/pop模型是方便切换Fragment,类似于startActivity。

    在这次的应用框架中也加入了ReactiveX框架RxJava,但在代码中使用Rx的地方目前仅有网络部分,使用Retrofit + RxJava主要实现了如下两个目标:
    1)网络错误统一处理
    2)UI销毁时自动解绑Retrofit

    另外,数据库选型也是这次应用开发的一大特色。本次数据库并没有使用SQLite版本的ORM框架,而是直接使用了跨平台数据库Realm。其实,在使用的时候,我有担心团队对Realm数据库不够熟悉,出现一些技术上的问题。事实证明,这种担心并不是多余的,大家的确对Realm数据库不够熟悉,最终我重写了Realm数据库存储部分代码...

    开源库选型

    值得一提的是,本次APP依赖中加入了大量我的开源库,其中使用黄色部分标记的矩形块都是来自于我的开源库。这其实有一定的风险,部分开源库是刚刚开发出来,并没有经过严格测试,在使用的过程中,可能需要一边改开源库代码,一边写逻辑代码。但带来的好处是:减少了辅助代码量,保持了整体代码的简洁性。

    为了更直观地让大家看到应用整体的设计,我们一起来看一下应用的UML图。

    应用UML图

    UML

    这是一个客户端类应用,核心部分主要包括UI + Network。因此,我们可以分两部分讲解。

    首先是UI部分,UI部分BaseActivity类主要提供了Fragment跳转相关API:

    // 跳转至目标Fragment
    fun push()
    // 目标Fragment出栈
    fun pop()
    // 同一级别Fragment平滑切换
    fun smoothToFragment()
    ....
    

    BaseActivity的两个子类FragmentContainerActivity和BasePresenterActivity主要用于简化push/pop操作和MVP框架的使用。

    BasePresenterActivity的子类无需考虑Presenter的创建以及Presenter内存回收。另外,BaseActivity的依赖ActivityManager主要用于对Activity栈进行手动管理。

    这里只展示了Activity部分的UI设计,Fragment部分的设计完全等同于Activity。

    接下来简单讲一下网络部分的设计,网络部分使用当前最流行的网络框架Retrofit + RxJava,RxJava主要用于辅助Retrofit实现在UI销毁的时候自动解绑以及统一处理回调。这是我第一次使用RxJava,因此,在解决这部分需求的时候,其实花费了不少时间,但最终的效果还算比较完美。

    框架不足

    由于时间紧迫,这个框架的设计并不完善,主要有以下几个方面的不足:
    1)部分页面回调较为麻烦
    2)页面路由较为麻烦
    3)EventBus的使用造成代码难以阅读
    4)MVP框架的设计依然不够简单

    NG

    由于存在上面的不足,下一代框架NG已经进入开发阶段,这个框架主要解决以下几个问题:
    1)简化页面路由
    2)简化页面回调逻辑
    3)实现类似EventBus逻辑,取代结构不清晰的EventBus
    4)简化MVP,尝试使用模板编程

    Kotlin使用体验

    这一次使用Kotlin,对Kotlin语言的熟练度已经超越了喜金会APP的开发阶段。我相信依然会有人问:是否遇到过Kotlin Bug或者不能实现的需求。答案可能要让你失望了,没有!

    使用Kotlin语言开发最舒服的地方主要体现在以下几个方面:
    1)几乎不再需要非空判断
    2)Lambda表达式让回调更加简洁
    3)扩展让调用更加自然
    4)简洁的语法极大地减少了代码量
    ...

    等等,使用Kotlin语言开发的确存在一个小问题:Kotlin插件偶尔会出现奔溃,从而导致提示异常。不过,这并不影响开发,只是偶尔导致提示异常而已。

    应用整体代码量

    未来计划

    未来个人工作重心依然会专注于Kotlin语言的推广工作,并且会持续对开源代码的贡献。下面是近期将要进行的几项工作:
    1)Kotlin技术研讨会(计划中)
    2)Kotlin视频教程
    3)Kotlin技术文章持续更新

    欢迎加入Kotlin交流群

    如果你也喜欢Kotlin语言,欢迎加入我的Kotlin交流群: 329673958 ,一起来参与Kotlin语言的推广工作。

    PS:感谢团队所有小伙伴的努力,大家辛苦了!


    相关文章

      网友评论

      本文标题:Life is short, you need Kotlin

      本文链接:https://www.haomeiwen.com/subject/sqalcxtx.html