cover_image

从零开始的Android新项目1 - 架构搭建篇

MarkZhai Android程序员 2016年03月14日 07:22

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

作者:MarkZhai


之前给大家推荐过 MarkZhai 同学的多篇文章,今天这篇是他给自己新挖的坑的开篇,记录分享他在新项目搭建上的一些经验,我觉得很有意义,因此推荐给大家。作者透露后续还规划了详细的Gradle讲解篇,其中包括“版本号管理”、“依赖管理”、“签名管理”、“Java8 支持”、“Split Apk”、“Module AAR 依赖”等主题,敬请期待。


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


图片

Application specific

类似 Clean Architecture,分为三层 presentation - data - domain。
关于 Clean Architecture 由于国内的一些文章和项目都多少有偏离和错误,建议直接看这两篇文章:

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

data为domain的实现,是Android library,从MVP的角度来说,即是M层,内部隐藏所有数据细节,cache、数据库、网络、PO、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: 第三方认证(登陆)。

lib_share: 第三方分享。

…等等

Third party libraries

Dagger, jsr250

Rx大家族: RxJava, RxAndroid, RxBinding

Retrofit

EventBus

Realm

support库, data binding

LeakCanary, BlockCanary



文中不少概念并没有展开说明,大家有兴趣可以 Google 深入了解。

微信扫一扫
关注该公众号

继续滑动看下一个
Android程序员
向上滑动看下一个