## 项目介绍
## 模块化
#### 什么是模块化?
相对独立业务拆分成块,单独开发调试
拼接业务模块,组装app
#### 为什么需要模块化?
业务分离 解耦
单独开发,模块之间互不影响
#### 如何实现模块化?
公用模块抽取
业务模块抽取
主工程组装模块
#### 模块之间通讯?
跨模块跳转
跨模块接口调用
路由框架 Arouter
### 项目采用的是多模块开发的
### MVP 架构
## 项目中用到的技术
kotlin-android-extensions kotlin提供的插件,不需要引入第三方库
RxKotlin RxAndroid
RxLifecycle 生命周期管理的
Retrofit
OkHttp
Dagger2
Gson
Arouter 模块路由
Glide
takephoto
七牛 数据云存储
MultiStateView 多状态视图
bga-refreshlayout 上下拉刷新
## 项目初始化 包结构设计
BaseLibrary
Provider
UserCenter
App
kotlin的引入
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
#### BaseLibrary
抽取公共的部分在base模块里面
#### 初始化用户模块
Application 和 Library
Application作为应用程序启动 : apply plugin:'com.android.application'
Library作为库引用 : apply plugin:'com.android.library'
### Rxkotlin RxAndroid
基于RxJava
使用1版本 导包
使用 :1.Service 创建接口方法
2. userService.register(username,password,code)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { object:Subscriber<Boolean>( ){
override fun onCompleted() {
mview.on....()实现回调方法 通过P层传递信息到view层
}
override fun onError(e: Throwable?) {
}
override fun onNext(t: Boolean?) {
}
} }
3.改造下方法
open class BaseSubscriber<T>(val baseView: BaseView) : Subscriber<T>() {
override fun onNext(t: T) {
}
override fun onCompleted() {
baseView.hideLoading()
}
override fun onError(e: Throwable?) {
baseView.hideLoading()
if (e is BaseException) {
baseView.onError(e.msg)
}
}
}
这里面就是集中的处理了多余的方法 onError onCompleted
让他传进来view的目的是实现view中错误的回调
4.改造 .observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe
这一块是一样的 我们可以使用扩展方法来简化
扩展方法
fun <T> Observable<T>.excute(subscriber: BaseSubscriber<T>, lifecycleProvider: LifecycleProvider<*>) {
this.observeOn(AndroidSchedulers.mainThread())
.compose(lifecycleProvider.bindToLifecycle())
.subscribeOn(Schedulers.io())
.subscribe(subscriber)
}
5.
## Retrofit 集成与单例工厂
###### 配置 : okhttp Retrofit Gson interceptor adapter-rxjava
1.定义一个接口 接口里面定义了请求的方法 返回值的类型
2.构建Retrofit
可以传入初始化的参数 baseurl
3.初始化创建
creat(接口.class).调用接口里面的方法
post请求接口里面的参数是@Body User user 就是自己创建的一个请求体
单例工厂
1.私有化构造
2.伴生对象 懒加载 这也是一个线程安全的
3.init{ 初始化Retrofit对象 设置base地址 拦截器 gson转换 client}
4.调用
## Dagger2
### 依赖注入
目标类中需要用到其他类,首先需要创建其他类的对象,依赖注入就是不需要我们手动的创建对象,通过技术手段把其他类已经初始化好的对象实例注入到目标类中
一般的我们可以称依赖注入为控制反转.控制反转分为依赖注入和依赖查找,依赖注入比较常用
### java注解
也叫元数据.一种代码级别的说明
### dagger2中的inject component module provides 含义,有什么用 ?
###### Inject
用注解来标注目标类中所依赖的其他类,
同样采用注解来标注所依赖的其他类的构造函数,那注解的名字就是inject
###### Component
Component也是一个注解类,一个类想要是Component,必须用Component注解来标注该类,
并且是接口或者是抽象类
@Component 注入器 连接目标类和依赖实例的桥梁
以@Component标注的类必须是接口或者是抽象类
@component 依赖关系是通过dependencies属性添加
APp必须有一个全局的Component来管理全局实例
工作原理 : Component需要引用到目标类的实例,Component会找目标类中用Inject注解标注的属性,
查找到相应的属性后会接着找该属性对应的用Inject标注的构造函数,就发生联系了,
剩下的工作就是初始化该属性的实例并且把实例进行赋值.我们可以叫他注入器
###### module
使用场景 :项目中使用到第三方库,这个时候Inject就不能用了
接口不能实例化 ,只能通过实现类实例化,这个时候Inject也不能用了
Module其实就是一个简单的工厂模式,Module里面的方法基本都是创建类实例的方法
Component(管理者)可以通过modules属性加入多个Module
###### provides
在module中,使用它标注创建实例的方法
#### 执行流程
依赖注入
Module的优先级高于Inject构造函数
步骤1:查找Module中是否存在创建该类的方法。就是用 @Provides 标注的providesXXX的方法
步骤2:若存在创建类方法,查看该方法是否存在参数
步骤2.1:若存在参数,则按从**步骤1**开始依次初始化每个参数
步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
步骤3:若不存在创建类方法,则查找Inject注解的构造函数,
看构造函数是否存在参数
步骤3.1:若存在参数,则从**步骤1**开始依次初始化每个参数
步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
###### 如果执行到@inject标注的属性的时候,我们呢就去module中先找provides标注的方法 ,找不到就找在实例类构造前有没有加@inject
可见module的优先级是高于inject构造函数的
#### Scope 作用域
用处就是Component的组织
更好的管理Component之间的组织方式,不管是依赖方式还是包含方式,都有必要用自定义的Scope注解标注这些Component,这些注解最好不要一样,不一样是为了能更好的体现出
component之间的组织方式,还有编辑器检查依赖关系或者是包含关系的Component,若发现有Component没有用自定义的scope注解标注,就会报错
更好的管理component与module之间的匹配关系,编译器会检查Component管理的Modules,若发现Component的自定义的Scope注解与Modules中的标注创建类实例方法的注解不一样,就会报错
##### @Scope和@Singleton
@
没有合适的资源?快使用搜索试试~ 我知道了~
kotlin开发商用的电商项目-kotlin_ec.zip
共1472个文件
png:1136个
kt:171个
xml:128个
需积分: 0 0 下载量 151 浏览量
2023-11-04
22:09:07
上传
评论
收藏 4.94MB ZIP 举报
温馨提示
kotlin开发商用的电商项目-kotlin_ec
资源推荐
资源详情
资源评论
收起资源包目录
kotlin开发商用的电商项目-kotlin_ec.zip (1472个子文件)
gradlew.bat 2KB
.gitignore 118B
build.gradle 3KB
build.gradle 2KB
build.gradle 1KB
build.gradle 1KB
build.gradle 1KB
build.gradle 999B
build.gradle 880B
build.gradle 684B
settings.gradle 109B
gradlew 5KB
gradle-wrapper.jar 52KB
ExampleInstrumentedTest.java 756B
ExampleInstrumentedTest.java 750B
ExampleInstrumentedTest.java 746B
ExampleInstrumentedTest.java 740B
ExampleInstrumentedTest.java 738B
ExampleInstrumentedTest.java 738B
ExampleUnitTest.java 403B
ExampleUnitTest.java 400B
ExampleUnitTest.java 398B
ExampleUnitTest.java 395B
ExampleUnitTest.java 394B
ExampleUnitTest.java 394B
home_container_bg.jpeg 89KB
DateUtils.kt 7KB
CartFragment.kt 7KB
GoodsDetailTabOneFragment.kt 6KB
UserInfoActivity.kt 5KB
CategoryFragment.kt 5KB
GoodsSkuPopView.kt 4KB
GoodsListActivity.kt 4KB
YuanFenConverter.kt 4KB
CommonExt.kt 4KB
BottomNavBar.kt 4KB
RegisterActivity.kt 4KB
HomeFragment.kt 3KB
MainActivity.kt 3KB
GoodsDetailActivity.kt 3KB
MainConstant.kt 3KB
MeFragment.kt 3KB
CartAdapter.kt 3KB
LoginActivity.kt 2KB
RetrofitFactory.kt 2KB
ForgetPwdActivity.kt 2KB
VerifyButton.kt 2KB
AppPrefsUtils.kt 2KB
RoundRectImageView.kt 2KB
SkuView.kt 2KB
CartListPresenter.kt 2KB
HeaderBar.kt 2KB
OrderConfirmActivity.kt 2KB
ShipAddressRepository.kt 2KB
ForgetPwdPresenter.kt 2KB
UserRepository.kt 2KB
CartRepository.kt 2KB
BaseMvpActivity.kt 2KB
ProgressLoading.kt 2KB
GoodsAdapter.kt 2KB
GoodsDetailPresenter.kt 2KB
UserApi.kt 2KB
OrderRepository.kt 2KB
OrderServiceImpl.kt 1KB
GoodsDetailTabTwoFragment.kt 1KB
GoodsListPresenter.kt 1KB
HomeDiscountAdapter.kt 1KB
ShipAddressServiceImpl.kt 1KB
NewsFlipperView.kt 1KB
CartServiceImpl.kt 1KB
BaseMvpFragment.kt 1KB
UserServiceImpl.kt 1KB
GoodsRepository.kt 1KB
GlideUtils.kt 1KB
NetWorkUtils.kt 1KB
AppManager.kt 1KB
SceondCaregoryAdapter.kt 1KB
RegisterPresenter.kt 1KB
BaseRecyclerViewAdapter.kt 1KB
ShipAddress.kt 1KB
CaregoryAdapter.kt 1KB
ShipAddressApi.kt 1KB
GoodsServiceImpl.kt 1KB
TopicAdapter.kt 1KB
LoginPresenter.kt 1KB
OrderApi.kt 1KB
CartApi.kt 1KB
GoodsApi.kt 1014B
BaseApplication.kt 991B
UserInfoPresenter.kt 974B
Md5Utils.kt 959B
UserPrefsUtils.kt 953B
UserComponent.kt 950B
CategoryPresenter.kt 936B
UploadRepository.kt 922B
OrderPresenter.kt 918B
GoodsDetailVpAdapter.kt 918B
GoodsComponent.kt 871B
BaseActivity.kt 830B
FragmentComponent.kt 811B
共 1472 条
- 1
- 2
- 3
- 4
- 5
- 6
- 15
资源评论
武昌库里写JAVA
- 粉丝: 3228
- 资源: 1925
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功