热文导读 | 点击标题阅读

金九银十跳槽季如何进阶找到合适满意的工作?

美团面试失败(Java开发)

程序员年度总结:2019年,你的出路在哪?

作者:CysionLiu (源码下载地址见文末)

来源:https://java.ctolib.com/article/wiki/105866

为什么叫麻雀

麻雀虽小,五脏俱全。

其实本app并不叫做麻雀,只是本人认为它比较符合麻雀的特点:小而全。

小,即轻量级,一是指app只专注于实现常见app基础的逻辑业务功能,并没有在某个功能点或者UI上做更为细节的实现;二是指app使用了简洁的的Kotlin语言作为实现语言,使用了相对简单的一种MVP实现方式,使用了一种比较轻量级的组件化方案。

全,当然是相对的,一是指app的后端也是本人开发,这能让整个业务逻辑更为全面,也能让感兴趣读者能更为全面的了解此app;二是指app涉及了当前技术趋势下安卓开发的多个技术点,包括kotlin,mvp,组件化,rxjava,retrofit等;三是指本app实际上可以作为一个快速开发框架,这主要得益于组件化的实现,具体怎么使用,后续会提到。

此app名字不叫麻雀,而是叫做KtDevBox。

仓库地址:

App实现:
https://github.com/CysionLiu/KtDevBox
后端实现:
https://github.com/CysionLiu/KtDevBox-backend

扫描二维码,可下载体验:


为什么要写这个app

诚然,网上关于Kotlin,MVP,组件化的研究、分享已经有很多,但是多数博客仅仅是泛泛而谈,代码库没有提供不说,博客中的代码甚至都有问题,有些更是抄来抄去。虽然有些好资源的确有挺好的借鉴意义,比如KotlinMvp、Reading等【本文仅着眼于项目级别实现,一些好的library并不在此讨论中】,但以下几点还是让我觉得有些不足:

  • 这些项目的接口,基本都是爬来的,大多数都是get方式实现,很难形成比较完整的一个功能逻辑,也很难从更全的角度去来展示某些技术点的实现;

  • Kotlin的使用,Java的味道较重,特别是网络请求的封装部分;

  • 组件化几乎没有涉及,项目是个app,并不能方便的转为另一项目的实现框架;

  • 文档等介绍略少

KtDevBox当然也存在的一些不足,但该项目的初衷,也仅做学习交流之用,以期对该方面技术的发展,起到一点点帮助。

为什么用Kotlin

仅说自己体会,至少有这几个原因吧:

  • 语言切换,对老手真不是问题,况且kotlin与java的兼容性很好,所以学习成本不应作为不使用kotlin的理由;

  • 真正摆脱了控件从布局到使用的查找问题,简洁明了;

  • 函数地位的提升,带来的编程思想的改变,对开发者开发思维是有提升的,当然,代码的灵活、更好的扩展是可视的效果;

  • 闭包、扩展函数、命名参数等语法糖带来的诸多便利。

为什么用MVP

有关MVP的讨论真是太多了,不过正如本人之前的博客提到,MVX不管怎么叫,核心在于分层,至于是C、P或是VM,要看项目自身情况来,甚至可以在同一项目中出现。本项目使用的是MVP的一种简化些的实现方式,至于好不好用,仁者见仁,这里只谈使用,不谈优劣,手动滑稽。再简略叨叨下MVP的发展吧,以表原因。

  • MVC中C重,于是功能转移,出现来了xxModel、xxLogic党,主要分担数据获取的职责;

  • C和xxModel的强依赖、空指针问题和内存泄露问题,促进了Presenter的出现,其主要处理业务逻辑,并绑定View的生命周期,面向接口,更为松耦合;此时C转为P。

  • 完全面向接口之后,难以避免的V和P接口爆炸,也过于分散,出现了Contract,人工约束,首见于github上谷歌的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编程,手动哈哈,另一个话题)。

主要使用的第三方库

感谢:

  • Retrofit

  • RxJava

  • glide

  • statusbarutil

  • eventbus

  • appjoint

  • logger

  • ultraviewpager

  • multiple-status-view

  • SmartRefreshLayout

  • DToast

  • MultiWaveHeader

  • xedittext

  • Targetfun

本项目仅做学习交流之用。

仓库地址:

App实现:
https://github.com/CysionLiu/KtDevBox
后端实现:
https://github.com/CysionLiu/KtDevBox-backend

喜欢请记得Star一下。

后续还有更为详细的项目介绍。

最后,可能有些童鞋还对下面这张图感兴趣。不过,本文只谈技术,不谈“风月”,微笑。

想进阿里吗?快加入我们的知识星球吧,如下:

如有收获,欢迎「分享 

「点赞「评论 

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可


最后,国庆福利来了,我们的知识星球已达到1000人了,之前说过到达1000人时将大大幅涨价到169元,为了反馈大家对我们的关注和厚爱,特此维持现价99元最后一天,今天后(今晚 00:00)后将涨到169元,欢迎大家加入我们的知识星球,更多星球信息参见:

如何进阶成为Java和Android架构师?

金九银十跳槽季如何进阶找到合适满意的工作?

说两件事

微信扫描或者点击上方二维码领取Android\Python\AI\Java等高级进阶资源

更多学习资料点击下面的“阅读原文”获取

一款基于Kotlin+MVP+组件化的麻雀App(文末有彩蛋)相关推荐

  1. 基于SOA的组件化业务基础平台[转]

    转自https://www.ibm.com/developerworks/cn/webservices/1111_xiaojg_soa/index.html 业务基础平台是业务逻辑和基础架构平台之间的 ...

  2. 基于 SOA 的组件化业务基础平台

    基于 SOA 的组件化业务基础平台 原文:基于 SOA 的组件化业务基础平台 前言 业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 "应用软件的业务描述和操作系统平台.软件基 ...

  3. automake生成静态库文件_基于CocoaPods的组件化原理及私有库实践

    轮子为什么会存在 智人能在残酷的进化大战中存活下来,原因之一就是智人懂得将知识沉淀成外物,辅助彼此之间的合作,从而使得整个群体产生了规模效应,即1+1>2的效果. 从一个角度上说,石器时代是基于 ...

  4. Android 基于注解IOC组件化/模块化的架构实践

    当前参与的项目历史也很久远,第一行代码据说是写于2014年的某一天,那时Android用的ide还是Eclipse.那时Android还没有很好的架构指导(mvp.mvvm).那时Android最新的 ...

  5. java ast 添加注解_基于AST的组件化自动插桩方案

    本文将带你实现一个一百多行代码实现的自动化插桩方案,解决组件化子模块的初始化和路由器的自动注册,支持多种类型的插桩.支持前插后插.支持插入代码的优先级设置.我们将使用编辑器的API来操作AST实现代码 ...

  6. iOS 基于CTMediator的组件化方案

    目录 1.创建私有 Spec Repo 2.新建工程(New Project) 3.你需要创建podspec文件 4.设置podspec文件 5.创建提交update.sh脚本 6.CTMediato ...

  7. android组件化蘑菇街,蘑菇街 App 的组件化之路·续

    前几天在「移动学习分享群」分享了关于蘑菇街组件化方面的一点经验,由于时间和文字描述方面的限制,很多东西表述的不是很清楚,让一些同学产生了疑惑,casatwy老师也写了篇文章来纠正其中的一些实现,看完之 ...

  8. 打开catia界面全是白色怎么办_基于CATIA的圆柱螺旋拉伸弹簧有限元分析(文末有“彩带”)...

    弹簧是一种利用弹性来工作的机械零件.用弹性材料制成的零件在外力作用下发生形变,除去外力后又恢复原状.从事机械设计的朋友常常需要设计弹簧,关于弹簧的相关知识大家可以查阅机械设计手册.今天我给大家分享一篇 ...

  9. 基于kotlin实现的简单个人账户管理APP

    转载请注明出处:http://blog.csdn.net/a512337862/article/details/78753608 前言 因为本人的账户越来越多,有点记不过来,一直准备写一个简单的个人账 ...

最新文章

  1. 每个优秀程序员必须具备的技术技能
  2. jquery mobile app案例_讲座预告 | 运动app内的个人成就、运动轨迹和社交分享对体能提升的长期效应研究...
  3. SkyEye——汽车电子系统仿真测试工具
  4. 为什么开发人员要使用Linux
  5. 做游戏,学编程(C语言) 6 数组之空战游戏
  6. hadoop集群安装配置
  7. Visual Studio蛋疼问题解决(2)
  8. Notion for Mac(多功能办公笔记软件)V2.0.10官方版
  9. xps数据怎么导出为txt_如何处理XPS原始数据
  10. 哪个说了算?漫谈网吧网络的稳定和安全(转)
  11. micropython stm32源码修改_网上买了ps2手柄,按stm32 代码 改写了个micropython
  12. 同时删除多个 Excel 文档空白行
  13. 免费试用华为云服务器一个月,部署自己的网站
  14. Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300
  15. Windows Embedded Compact 7 数据库开发(上)
  16. 电容麦克风测试软件,Precision sound
  17. OpenCV4学习笔记(58)——二维码检测与识别
  18. 以太网控制器学习(ENC28J60为例)
  19. 机器学习(四)SVM之根据相关数据预测交通流量
  20. 附加数据库 对于服务器 XXX失败

热门文章

  1. 四川川之音:抖音电商发布消费者权益保护年报:累计封禁超300万件风险商品
  2. Redis Lua 脚本常用操作总结及实现 CAS 操作
  3. 前端笔记-在Element UI中表格如何根据数据动态变化显示
  4. 各个年龄段理财规划:你该怎么办?
  5. Xcode11 Application Loader altool上传ipa
  6. frp内网穿透远程访问、运维技术
  7. 书法教学视频,轻轻松松练好书法!
  8. 【用JS自制表格软件玩数据】6. 单元格的多选
  9. [原创][从mambo到joomla的迁移实战之三]网站由mambo迁移到joomla
  10. Design the Web: Control Colors in Photoshop with SmartObjects Photoshop网页设计教程之如何用智能对象控制色彩 Lynda课程中文