从零开始的Android新项目1

来源:互联网 发布:李荣浩 喜剧之王 知乎 编辑:程序博客网 时间:2024/06/06 00:21

    <p>最近一直在忙新项目的事情,所以有的坑一直没填。。现在看来可能一时半会儿还填不了,倒不如记录一下新项目的搭建。</p>

试想一下,如果没有历史负担,没有KPI压力,去新搭建一个项目,你会怎么设计和实现呢?

本系列文章不是教你怎么从0开始学Android,从0开始怎么建一个项目,而定位于零负担的情况下,在2016年怎么去创建一个好的Android项目,其中一部分技术并不太适合刚入门的初学者。

architecture

Application specific

类似clean architecture,分为三层 presentation - data - domain。

关于Clean Architecture由于国内的一些文章和项目都多少有偏离和错误,建议直接看

  • http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
  • http://fernandocejas.com/2015/07/18/architecting-android-the-evolution/

两篇文章。

domain为纯领域模型,是Java library,包含了use case(Interactor)、DO、repository接口等domain package,目标是在任何Java语言的平台上都能直接使用,所以必须是平台无关,对平台没有任何依赖,能使用Java的方法(JUnit + Mockito)来直接进行测试。

data为domain的实现,是Android library,从MVP的角度来说,即是M层,内部隐藏所有数据细节,cache、数据库、网络、PO、exception(根据业务特点自定义的exception)、repository的具体实现(内部屏蔽数据细节,可能来自网络、数据库、缓存等)。使用Robolectric 3 + JUnit + Mockito进行集成测试。

presentation即展示层,是Android application module,对data不存在实际感知,依赖仅仅是Dagger注入的实例化,所有访问都通过接口进行,可见的是domain里的接口。包含了error message factory(所有exception都会被factory生成对应的message)、DI、mapper(vo转换)、VO(data binding进行MVVM)、navigation、presenter(不强制,仅在一些特别复杂的场景引入)、usersystem、utils(业务相关)、view(activity、fragment、adapter等)、application实现、业务常量等。可以使用Espresso和Android Instrumentation进行UI测试。

整个项目类似MVP+MVVM的混合(谁跟你说的MVP和MVVM是互斥的?),不过P层不一定存在,以避免为了模式而模式所导致的开发压力。

Common libraries

aar依赖以避免对编译速度造成影响,不过这里比较巧妙的是依赖作为module引入,所以当需要源码依赖的时候在build.gradle里进行注释/反注释就能迅速切换,十分方便。

lib_uiframework: UI framework,包含了各种Base类,如BaseActivity、BaseFragment、Navigator(应用中的一切通过scheme跳转)、ActivityManager、FragmentBackHelper等。

lib_uikit: 各种自定义view、第三方view的gradle或者源码依赖。

lib_im: 即时通讯库。

lib_component: 组件库,如cache、gif、ClassLoaderInjecter、Log、SP、Web等。

lib_authorize: 第三方认证(登陆),目前包括QQ、微信、微博、LinkedIn。

lib_share: 第三方分享,目前包括QQ、微信、微博。

…等等

Third party libraries

Dagger, jsr250: 依赖注入框架让我们省了很多代码,jsr250则是Dagger注入时的一个annotation根据,我们的domain依赖了jsr250。

Rx大家族: RxJava, RxAndroid, RxBinding。新时代Android开发必备,还用说吗?

Retrofit: 装逼,喔,不对,高效率开发必备的网络框架。使用注解生成API,方便极了。我这里的实践是根据业务划分多个API接口,然后通过Dagger module进行实例化注入。

EventBus: 有了RxJava还要EventBus?当然,事件并不总是一对一的,也不总是流式的(可能是持续被动的)。举个简单的例子,feed详情信息更新后(比如点赞数据),外部可能有2个timeline页面也需要更新这个数据,这个时候EventBus就可以优雅地进行事件广播。

Realm:一个不依赖于SqlLite的ORM库,特点就是…快。还有同时有多个平台的方案: ReactNative, OC, Swift, Java…

Google Support库, data binding: Google家的,不用说了吧。

LeakCanary, BlockCanary: 开发阶段必备工具,前者是square家检测内存泄露的,后者是我自己做的卡顿检测工具。

Glide, Glide Transformation: 不折腾fresco,乖乖用Glide。

转自:http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p1/

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 石家庄桥东区送花 邢台桥东区楼盘 桥之美 无锡高架桥倒塌事件 无锡高架桥倒塌事故 无锡312高架桥倒塌 江苏高架桥倒塌 无锡高架桥倒塌原因 江苏桥倒塌 无锡桥倒塌事故 无锡312国道高架桥倒塌 2019年郑州高架桥倒塌 开往安河桥北 安河桥北什么意思 开往安河桥北表达意义 安河桥北唯美图 捉鬼有红包 南桥北道 陈家桥医院 上桥医院 市桥医院地址 健桥医院 颛桥南街100块 桥图片 玻璃桥图片 高架桥图片 桥的图片 铁板桥正确姿势图片 桥本有菜图片 老桥恐怖片图片 桥简笔画图片 张家界玻璃桥图片 大峡谷玻璃桥图片 风雨桥图片 清远玻璃桥图片 中山桥图片 桥的图片简笔画 桥的制作方法及图片 世界名桥图片 摇啊摇桥绵羊队女生图片 三桥我是大哥大图片 绘画桥图片