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图
这是一个客户端类应用,核心部分主要包括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:感谢团队所有小伙伴的努力,大家辛苦了!