- 颜色资源文件:统一在【CommonSdk】用cxxx命名,例如:
<color name="cFFFFFF">#ffffff</color>
- 每个Module都会对资源文件做统一规范,详情见Gradle文件中的resourcePrefix配置,由于这个配置只能检测XML文件,所有每个Module中的独有的图片资源文件,在文件名面前加上相应的模块名,例如:登录模块:login_xxx
- 控件 id 使用驼峰命名,除公共模块,id 命名都要包含自己的模块名。比如 tvHomeOpenCart 表示 home 模块的 TextView,用来打开购物车。
APP 这里可以进行模块划分 |
|||||
这里可以再建一个CommonBase库,用于管理一些资源文件,工具类等等非业务的代码 第三方库都可以在这里进行统一管理 | |||||
CommonMvvm/CommonMvp MVVP或者MVP模式的库,一个项目只能选择一种库进行开发 |
CommonView 通用的自定义View框架,一些APP特有的view效果可以抽出独立成一个库 |
||||
CommonArchitecture 通用框架库。包含BaseApplication、常用的工具类以及架构层的封装 |
|||||
CommonNetwork 网络库,目前是okhttp + retrfoit |
CommonRepository 数据管理库 |
APP | ||||||
module_XXX XXX模块 |
module_XXX XXX模块 |
|||||
CommonSdk 2号人事部项目公共库(与业务逻辑相关,主要包含一些组件化的封装),所有的第三方框架和自定义View框架都在这里添加依赖,以方便统一管理。 是其他所有子组件必需依赖的库 |
CommonBaseService 公共服务,主要的作用是用于 业务层 各个模块之间的交互(自定义方法和类的调用), 包含自定义 Service 接口, 和可用于跨模块传递的自定义类z |
|||||
CommonMvvm/CommonMvp MVVP或者MVP模式的库,一个项目只能选择一种库进行开发 |
CommonView 通用的自定义View框架,一些APP特有的view效果可以抽出独立成一个库 |
|||||
CommonArchitecture 通用框架库。包含BaseApplication、常用的工具类以及架构层的封装 |
||||||
CommonNetwork 网络库,目前是okhttp + retrfoit |
CommonRepository 数据管理库 |
自定义了GsonConverterFactory
,对数据进行拦截处理
具体查看com.arnold.common.sdk.app.GlobalHttpHandlerImpl.onHttpInterceptResponse()
方法实现
- 简单数据存储
- DataHelper 类,目前采用微信的MMKV代替SharedPreferences进行简单的数据存储
- 数据库:目前还没有定下来,可以采用GreenDao或者ROOM
实现ConfigModule,便可以进行一些单独模块的初始化,考虑到不同模块可能需要初始化的顺序优先级,采用mLoadWeight字段进行区分,数值越大初始化越先,具体使用方案请看【公共的初始化】 里面的实现
例如请求的BaseURL,在【CommonSdk】模块中com.arnold.common.sdk.app.GlobalConfiguration
进行配置,
项目中提供了MVVM以及MVP的架构。后续的项目开发,可以其中一种模式开发也可以两种模式融合使用。非组件化项目不建议一个项目采用两种模式开发
- V: Actvity/Fragment
- VM:VM 为视图提供数据,主要方式为提供 LiveData 或者 Rx 的数据源、或者某些数据可以直接返回的,则提供对应的方法或属性供 V 直接访问。
- LiveData 不一定就需要在类中创建实例对象,也可以作为方法的返回值直接返回。
- LiveData 的使用不要局限于 VM 中,没有限制,只要场景适合,就可以使用。
- M:负责数据的存储和获取,统一命名为 xxxModel。
- MVVM 三者通过 Dagger2 进行绑定
- V: Activity/Fragment
- P: 里面处理数据逻辑操作,通过注入的View对V层进行数据显示操作。
- M: 负责数据的存储和获取,统一命名为 xxxModel。
只需要引用不同的架构模式进行开发就行
CommonMvvm
和CommonMvp