为何叫麻雀前端
麻雀虽小,五脏俱全。java
其实本app并不叫作麻雀,只是本人认为它比较符合麻雀的特色:小而全。ios
小,即轻量级,一是指app只专一于实现常见app基础的逻辑业务功能,并无在某个功能点或者UI上作更为细节的实现;二是指app使用了简洁的的Kotlin语言做为实现语言,使用了相对简单的一种MVP实现方式,使用了一种比较轻量级的组件化方案。git
全,固然是相对的,一是指app的后端也是本人开发,这能让整个业务逻辑更为全面,也能让感兴趣读者能更为全面的了解此app;二是指app涉及了当前技术趋势下安卓开发的多个技术点,包括kotlin,mvp,组件化,rxjava,retrofit等;三是指本app实际上能够做为一个快速开发框架,这主要得益于组件化的实现,具体怎么使用,后续会提到。github
此app名字不叫麻雀,而是叫作KtDevBox。shell
仓库地址:编程
App实现-KtDevBoxjson
为何要写这个app网络
诚然,网上关于Kotlin,MVP,组件化的研究、分享已经有不少,可是多数博客仅仅是泛泛而谈,代码库没有提供不说,博客中的代码甚至都有问题,有些更是抄来抄去。虽然有些好资源的确有挺好的借鉴意义,好比KotlinMvp、Reading等【本文仅着眼于项目级别实现,一些好的library并不在此讨论中】,但如下几点仍是让我以为有些不足:
KtDevBox固然也存在的一些不足,但该项目的初衷,也仅作学习交流之用,以期对该方面技术的发展,起到一点点帮助。
为何用Kotlin
仅说本身体会,至少有这几个缘由吧:
为何用MVP
有关MVP的讨论真是太多了,不过正如本人以前的博客提到,MVX无论怎么叫,核心在于分层,至因而C、P或是VM,要看项目自身状况来,甚至能够在同一项目中出现。本项目使用的是MVP的一种简化些的实现方式,至于好很差用,仁者见仁,这里只谈使用,不谈优劣,手动滑稽。再简略叨叨下MVP的发展吧,以表缘由。
我的认为,M结构相对很稳定,View并没有太大必要经过持有P的接口引用去使用P,再者经过Contract的维护并不能真正下降接口太多形成的注意力分散问题。本项目app的MVP实现较为简单些,也是一种比较常见的方式,具体可阅读项目代码。
为何用组件化
组件化是近两年才较为突出的一种项目管理实现方案,本人认为其符合基本的分而治之的思想,是同MVX同样,应该出如今任何一个打算长期维护的项目中的技术方案。其实,不只在安卓端,在ios端、前端(Vue)、后端(Java、Python)都有组件化的使用。至于什么是组件化,组件化有什么好处以及如何实现,我想网上有太多优秀博客和开源库说起,这里就再也不赘述。
本app虽然小,但也涉及了组件化,选择的是一种很轻量级、侵入性小的方案--Appjoint,方案虽然轻量级,可是本人认为:组件化思惟,入侵性小、能在最初的时候将业务进行组件化管理是组件化的核心,而这个库很好的符合了要求。
主要功能点
项目架构
项目核心架构如图所示:
项目中的shell只含有MyApplication这一个类文件,目前app涉及的业务也仅usercenter和media这两个module,其中usercenter和module并没有依赖关系。所以,此项目彻底能够做为一个快速开发框架。简单作法:新建几个module编写自身的业务,仅须要被shell依赖,它们并不会受到原业务usercenter和module的影响。而后更改入口Activity以后,就是一个新项目,也不会被打包进apk中。更多组件化的使用可见Appjoint的介绍。
目录结构
每一个组件和通常app的目录结构基本一致,主要多出了一个package,用来盛放与其它组件通讯用到的类,项目中media组件有实例展现。
router库的结构以下图,其中每一个组件都单独拥有一个package,里面分别盛放组件间通讯的服务接口和共享的数据(组件通讯数据实体类,或者面向json编程,手动哈哈,另外一个话题)。
主要使用的第三方库
感谢:
本项目仅作学习交流之用。
仓库地址:
喜欢请记得Star一下。
后续还有更为详细的项目介绍。
最后,可能有些童鞋还对下面这张图感兴趣。不过,本文只谈技术,不谈“风月”,微笑。