MVP + Dagger2 + Kotlin 随笔

本文介绍了如何在MVP架构中结合Dagger2和Kotlin进行依赖注入,详细阐述了Dagger2的引入、组件结构、构造参数注入、Builder模式、Factory模式的使用,以及不使用@Inject创建对象的方法。同时讨论了Dagger2在跨模块通讯中的作用,以及Kotlin的扩展功能在项目中的应用。
摘要由CSDN通过智能技术生成

这些工具的使用入门门槛还是挺高的,属于架构设计层次。所以边学习边记录一些学习过程的知识。其中涉及大量转载知识点。下面内容可能能帮助你入门。

MVP

不是重点,了解即可。业务实现分别通过Model、ViewPresenter来承载。Model可以看成是模块的业务逻辑和数据的提供者;View专门负责数据可视化的呈现,和用户交互事件的相对应。一般地,View会实现一个相应的接口;Presenter是一般充当ModelView的纽带。
以Android为例子,View通常为Activity/FragmentModel比如简单业务UI更新等等,Presenter负责联系两者。

// MVP中的V层 视图UI
public class MainActivity extends Activity implements IUpdate {
   
    private Presenter mPresenter;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化presenter 将update接口对象传递给presenter
        mPresenter= new Presenter (this);
        //调用Presenter方法加载数据
        mPresenter.loadData();

         ...
    }
	
	@Override
    public void updateUI(String data) {
   
        Log.d(TAG,"需要更新UI的数据:" + data);
    }
}

//MVP中的P层 交互表现层
public class Presenter {
   
	//业务接口
    private IUpdate mIUpdate;

    Presenter (IUpdate  update) {
   
        mIUpdate = update;
    }

    public void loadData() {
   
        //调用model层方法,加载数据
        ...
        //回调方法成功时
        mIUpdate.updateUI(new Model().getText());
    }
}

public interface IUpdate {
   
	void updateUI(String data);
} 
//MVP中的M层 业务实现层
public class Model {
   
    public String getText(){
   
        return "测试业务接口数据";
    }
}

如此实现了:

  • View与Model完全隔离
  • Presenter与View的具体实现技术无关,只涉及依赖接口

但是这样仅仅只是业务上的解耦。观察发现,构造函数创造实例时,仍旧是直接的耦合,例如Presenter构造需要修改,则需要动ActivityPresenter代码。当然不是说使用Dagger2完全不用改ActivityPresenter代码,而是从设计的角度去进行相应的变化以及简化。所以我们来看看Dagger2使用后有什么优势。

Dagger2

官方文档 https://dagger.dev/dev-guide/
Google Dagger github
Dagger2 是一个依赖注入框架,具备解耦的特性。通常是对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。(转自wiki,可以查看中的描述wiki

引入插件和依赖

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:xx"

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

implementation 'com.google.dagger:dagger:2.xx'
kapt 'com.google.dagger:dagger-compiler:2.xx'

Dagger2结构简单描述

调用方的最常规的调用方式方法,假设定义了一个SimpleModule,需要使用其中提供的方法。那么builder然后调用该方法simpleModule

DaggerSimpleComponent.builder()
                .simpleModule(new SimpleModule(this))
                .build()
                .inject(this);

最常规的例子:构造传参数实现

public class MainActivity extends Activity implements IUpdate {
   
	@Inject
    Presenter mPresenter;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		//Dagger2常用构造传参实现
		DaggerMainComponent.builder().uIModule(new UIModule(this)).build().inject(this);
       	Button button = ...
       	button.setOnclickListener(){
   
       		@Override
       		public void onClick(View view){
   
       			mPresenter.loadData();
       		}
       	}
    }
	
	@Override
    public void updateUI(String data) {
   
        Log.d(TAG,"需要更新UI的数据:" + data);
        Text view = .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值