api 'com.arnoldx.ehr:x-ehrArchitecture:0.1.1'
api 'com.arnoldx.ehr:x-ehrMvp:0.1.1'
api 'com.arnoldx.ehr:x-ehrMvvm:0.1.1'
- 颜色资源文件:统一在【CommonView】用cxxx命名,例如:
<color name="cFFFFFF">#ffffff</color>
- 每个Module都会对资源文件做统一规范,详情见Gradle文件中的 resourcePrefix 配置,由于这个配置只能检测XML文件,所有每个Module中的独有的图片资源文件,在文件名面前加上相应的模块名,例如:登录模块:login_xxx
- 控件 id 使用驼峰命名,除公共模块,id 命名都要包含自己的模块名。比如 tvHomeOpenCart 表示 home 模块的 TextView,用来打开购物车。
- 所有Adapter类不能写在V中,必须单独新建一个类
- 所有的bean文件,只能作为数据载体,不能在里面做任何的逻辑操作,所有的逻辑判断操作全部移到工具类里面处理,每个模块都可以有自己独立的工具类
当页面需要横屏时android:screenOrientation="landscape"
,具体查看 横屏适配 暂时移除- 横屏异形屏适配 异形屏适配
APP 这里可以进行模块划分,具体可以参考二号人事部的项目架构 |
|||||
这里可以再建一个CommonBase库,用于管理一些资源文件,工具类等等非业务的代码 第三方库都可以在这里进行统一管理 | |||||
CommonMvvm/CommonMvp MVVP或者MVP模式的库,一个项目只能选择一种库进行开发 |
CommonView 通用的自定义View框架,一些APP特有的view效果可以抽出独立成一个库 |
||||
CommonArchitecture 通用框架库。包含BaseApplication、常用的工具类以及架构层的封装 |
|||||
CommonNetwork 网络库,目前是okhttp + retrfoit |
CommonRepository 数据管理库 |
APP | ||||||
module_calendar 日历模块 |
module_employee 员工模块 |
module_user 用户模块 |
module_hr 人事模块 |
module_browser web模块 |
module_login 登录模块 |
OldEhr 旧项目 |
CommonSdk 2号人事部项目公共库(与业务逻辑相关,主要包含一些组件化的封装),所有的第三方框架和自定义View框架都在这里添加依赖,以方便统一管理。 是其他所有子组件必需依赖的库 |
CommonBaseService 公共服务,主要的作用是用于 业务层 各个模块之间的交互(自定义方法和类的调用), 包含自定义 Service 接口, 和可用于跨模块传递的自定义类z |
|||||
CommonMvvm/CommonMvp MVVM或者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
进行配置,
实现me.jessyan.autosize.internal.CustomAdapt
接口
@Override
public boolean isBaseOnWidth() {
return false;
}
@Override
public float getSizeInDp() {
return 667;
}
实现onBarChange方法监听
public void onBarChange(BarProperties barProperties) {
}
项目中提供了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