MVP架构分为三层: Model层
、 View层
和 Presenter层
,其中Model层和View层并不直接交互,而是通过Presenter层来进行操作。系统中,用户仅与View层进行交互,当用户进行请求或其他操作时,由View层向Presenter层发出请求,Presenter层再去操作Model层。
Contract
中声明 View
和 Presenter
的接口, Contract
的使用时为了让View层和Presenter层的交互逻辑更为清楚;Presenter中实现与数据库/服务器的交互;Activity / Fragment即MVP中的View层,负责界面交互;Model层在 http
包中实现,Kotlin中可以用 data class
很方便地实现一个实体类,省略了Java中 setter
和 getter
的编写。
一些代码规范和Kotlin基础
在Presenter和Activity / Fragment中接口实现的顺序要和Contract中一样.
工程项目中,当一个Activity有Contract和Presenter时,再新建一个package
,若没有,则无需新建包.
保持 private fun funName()
写在 fun funName()
和 override fun name()
函数下面,Kotlin中默认权限为 public
.
Kotlin中, class
的继承使用 :
(代替Java中的 extends
关键字),接口的实现使用 ,
(代替Java中的 implements
关键字); class ClassName() {}
圆括号即为类的构造器,省略了 constractor
构造器关键字;一个类的初始化在 init {}
函数中进行.
MyContract.kt文件:
class MyContract {
interface View : IView {
fun onSomethingResult()
}
interface Presenter : IPresenter<View> {
fun doSomething()
}
}
MyPresenter.kt文件:
class MyPresenter : BasePresenter<MyContract.View>(), MyContract.Presenter {
override fun doSomething() {
API.instance.****(**).execute(
{...}
)
}
}
MyActivity.kt文件:
class MyActivity : BaseActivity<MyContract.View, MyPresenter>(), MyContract.View {
companion object {
fun start(context: Context?) {
context?.startActivity<**Activity>()
}
}
override fun bindLayout(): Int = R.layout.activity_my
override fun bindPresenter(): MyPresenter? = MyPresenter()
override fun onViewInit() {}
override fun onSomethingResult() {}
}
最后在AndroidManifest.xml
文件中注册Activity并注释.