Dagger2之应用篇(Dagger2+RxJava+Retrofit+OkHttp+MVP)-第7章

本文通过一个登录Demo展示了Dagger2与MVP模式的结合使用,探讨了Dagger2如何帮助对象间建立关联,并与未使用Dagger2的情况对比,强调了解耦和代码阅读的便利性。文中提到了项目结构,包括inject、ApiModule、AppModule、scope、Api、Contract等包的分工,以及创建AppComponent和LoginActivityComponent的步骤。作者认为,Dagger2在处理网络请求如Retrofit时更为简洁。
摘要由CSDN通过智能技术生成

介绍

        前面介绍了Dagger2,今天尝试自己的想法去应用了下,说实话很别扭,晚上睡觉思前想后这个的好处。总是有一种似懂非懂,感觉就是,让对象与对象之间产生了一中关联,多个module的provides(供给)的对象,通过1个Component联系起来,我尝试写了2个Demo,一个用了Dagger2,一个没有用,好处自己总结吧

MVP通过一个登陆Demo讲解

  • LoginAcitivity,view层,实现LoginContract.LoginMvpView接口(MVP中的Presenter通过接口形式调用view层)
  • LoginModule,Module层,提供了一个LoginApi的请求方法,返回LoginApi
  • LoginPresenter,Presenter层,继承LoginContract.LoginBasePresenter,内部通过login方法

MVP优点

  • 解耦View和Module(Activity再也不那么臃肿了)

  • 逻辑清晰,阅读代码只需要更具指定规则进行阅读(乱写的)
  • 其它自行体会

来个MVC和MVP图


项目结构


  • inject包所有的Dagger2的注入类
  • ApiModule类提供网络请求的提供的类,提供Retrofit
  • AppMoudle类通过Context和单利Toast
  • scope包自定义的scope
  • Api包放所有模块对应的Http请求
  • Contract包,mvp对用模块的view和presenter协议

开发逻辑

1:定义Application

public class App extends Application {
    private static Application app;
    public static AppComponent appComponent;
    @Override
    public void onCreate() {
        super.onCreate();
        app=this;
        //初始化全局AppComponent,主要对module里面单利和app处于一个生命周期
        appComponent = DaggerAppComponent.create();
    }

    public static Application getApplication(){
        return app;
    }

    public static Context getAppContext(){
        return app.getApplicationContext();
    }
}

2:AppComponent对应2个module

    AppModule提供Context和Appcation,ApiModule提供网络请求Retrofit(单利)

@Singleton
@Component(modules = {AppModule.class, ApiModule.class})
public interface AppComponent {
    Context getContext();
    Application getApplication();
    Retrofit getRetrofit();
    Toast getToast();
}
/**
 * 访问网络的Module
 */
@Module
@Singleton
public class ApiModule {
    public static final String BASE_URL = "https://www.iqshw.com/";

    @Provides
    public Interceptor providesIntercepter() {
        return new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                Response response = chain.proceed(request);

                String chainControl = request.cacheControl().toString();
                if (TextUtils.isEmpty(chainControl)) {
                    chainControl = "public, max-age=60, max-stale=240000";
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值