Life is short, you need Kotlin

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:感谢团队所有小伙伴的努力,大家辛苦了!


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,331评论 25 707
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,132评论 9 118
  • 一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他单一功能的框架 混合开发框架:...
    伟子男阅读 5,239评论 0 161
  • 附上原文作者连接:作者:金诚 一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他...
    这个美嘉不姓陈阅读 2,248评论 1 35
  • 你每每对我的过去 絮絮叨叨 却如数家珍 而我总说:“有吗?早都不记得了。” 我像个失忆的孩子 放下过往 继续奔跑 ...
    琅月儿阅读 414评论 0 0