/MinimalistWeather

Android平台开源天气App,采用MVP+RxJava+Retrofit2+OKHttp3+Dagger2+RetroLambda等开源库来实现。

Primary LanguageJava

MinimalistWeather

一、简介

MinimalistWeather是Android平台上一款开源天气App,目前还在开发中。项目基于MVP架构,采用各主流开源库实现。开发此项目主要是为展示各种开源库的使用方式以及Android项目的设计方案,并作为团队项目开发规范的一部分。

采用的开源库包括:

  • RxJava
  • Retrofit2
  • OKHttp3
  • ORMLite
  • Dagger2
  • ButterKnife
  • RetroLambda
  • Stetho

本项目还展示了:

  • MVP+RxJava在实际项目中的应用,MVP中RxJava生命周期的管理...;
  • 上述罗列的各种开源框架的使用方法;
  • Java8 Lambda表达式和Stream API的用法;
  • 怎样适配Material Design;
  • ToolBar、RecycleView、CardView、CoordinatorLayout等新控件的用法;
  • Gradle的基本配置(包括签名打包、项目依赖等等);
  • 如何更好的管理Gradle依赖库的版本;
  • 代码混淆配置;
  • 如何快速开发一款结构清晰、可扩展性强的Android Application。

二、项目结构设计图

架构设计图

三、项目包结构介绍

App Module包结构

-com.baronzhang.android.weather
    + activity	  //Activity不再负责View的职责,仅仅是一个全局的控制者,负责创建View和Presenter的实例
    + contract    //契约类,用于统一管理View和Presenter的接口
    - model       //MVP中的Model层
        + db
        + http
        + preference
        + repository //Model层中的Data Repository模块,对Presenter层屏蔽数据来源和细节,并将Model成中的数据包装成Rx Observer
    + presenter               //MVP中的Presenter层
    + util
    - view                    //MVP中的View层
        + adapter
        + fragment
        + widget
    - AppConstants.java        //App全局常量
    - WeatherApplication.java  //Application类

对于包结构的规范,大家不要照搬这个项目。由于这里只是个Demo,体量小,不会涉及到过多的业务,所以这样分包是合理的。但是在商业项目中,建议大家先按业务分包,然后再去遵循上面的分包规则。至于业务分包的粒度就需要大家根据各自的业务项目去合理把控了。拿安居客的来举例,我们可以这样分包:

-com.anjuke.android.app
    + chat            //微聊业务
    + newhouse        //新房业务
    - secondhouse     //二手房业务
        + activity    //Activity不再负责View的职责,仅仅是一个全局的控制者,负责创建View和Presenter的实例
        + contract    //契约类,用于统一管理View和Presenter的接口
        - model       //MVP中的Model层
            + db
            + http
            + preference
            + repository  //Model层中的Data Repository模块,对Presenter层屏蔽数据来源和细节,并将Model成中的数据包装成Rx Observer
        + presenter       //MVP中的Presenter层
        + util
        - view            //MVP中的View层
            + adapter
            + fragment
            + widget
    + renthouse           //租房业务
    - AppConstants.java   //App全局常量
    - AnjukeApp.java      //Application类