[Android - Kotlin] MVP架构

MVP架构分为三层: Model层View层Presenter层 ,其中Model层和View层并不直接交互,而是通过Presenter层来进行操作。系统中,用户仅与View层进行交互,当用户进行请求或其他操作时,由View层向Presenter层发出请求,Presenter层再去操作Model层。

Contract 中声明 ViewPresenter 的接口, Contract 的使用时为了让View层和Presenter层的交互逻辑更为清楚;Presenter中实现与数据库/服务器的交互;Activity / Fragment即MVP中的View层,负责界面交互;Model层在 http 包中实现,Kotlin中可以用 data class 很方便地实现一个实体类,省略了Java中 settergetter 的编写。

一些代码规范和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 {
        
        fun doSomething()
    }
    
}

MyPresenter.kt文件:

class MyPresenter : BasePresenter(), MyContract.Presenter {
    
    override fun doSomething() {
        API.instance.****(**).execute(
            {...}
        )
    }
}

MyActivity.kt文件:

class MyActivity : BaseActivity(), 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并注释.

你可能感兴趣的:([Android - Kotlin] MVP架构)