Android MVP+Retrofit+dagger2+RxAndroid框架整合(5)----MVP篇

9 篇文章 0 订阅
8 篇文章 0 订阅

作者:hwj3747
转载请注明

目录

MVC

说到软件的架构,最基本的就是MVC架构,并且目前为止,大多数Android APP还是采取MVC架构开发的,那么问题来了,MVC真的适合Android吗?
首先我们要了解一下MVC,MVC的架构图如下:

MVC (2).png

MVC架构把app区分成3个部分:
View:主要是负责显示界面,在Android中用activity来显示界面。
Model:主要负责数据的存取,例如从服务器取数据,或者做本地的数据缓存。
Controller:主要负责对整个app用户逻辑的处理。
整个逻辑很简单,如上图所示:View层接受用户事件,将用户操作发送给Controller层,Controller层再调用Model层请求数据,最后Model层返回数据给View层做显示。

为什么要有MVP

我们知道,不管是MVP,MVC,我们的目的只有一个,那就是降低程序的耦合性。但是在Android开发中,传统的MVC模式并不能对程序耦合性有很大的帮助。因为在Activity中setContentView设置页面的XML视图文件充当了View的角色,而Activity中其他业务逻辑的代码充当了Controller的角色,这就使得Activity的负担太大。我们把几乎所有的任务都放在了Activity中,使得程序的可读性变得很差,以及程序日后的维护都变得极其困难。

MVP

首先MVP的结构图如下:

MVP.png

如上图,MVP架构把程序分成3个部分:
View:负责显示界面UI。
Presenter:负责业务处理。
Model:负责获取数据。
在MVP中View层已经不能和Model层交互了,而是有了一个Presenter层,同样的View层还是负责显示界面,Presenter层接收View层收到的用户操作,再调用Model层获取数据,根据Model层的返回结果再在这个View上做相应的显示。这样,将View层与Model层完全解耦,Activity不再关心如何获取数据,只需接收Presenter的返回的数据做相应的显示就行了!

如何实现MVP

我们来写一个测试程序:
首先是view层,定义一个View与Presenter交互的接口TestView,定义一个show方法,presenter持有这个接口就可以调用fragment的方法,用来回显数据。在UI界面,我们用一个fragment来显示,这个fragment持有presenter的实例,并且实现TestView方法,在这个界面中一个TextView,一个Button,点击button调用presenter的test方法:

public interface TestView {    void show(String test);}
public class TestActivityFragment extends Fragment implements TestView {

    @Inject
    TestPresenter presenter;

    @InjectView(R.id.text)
    TextView text;

    @InjectView(R.id.add)
    TextView add;

    ...........
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter.bindView(this);
        add.setOnClickListener(v-> presenter.test());
    }

    @Override
    public void show(String test) {
        text.setText(test);
    };
  ...............
}

然后是presenter层,在presenter层,持有一个Model层的实例,并且有一个test方法,在这个方法中调用Model的test方法获取数据,并且得到返回结果通过调用TestView接口的Show方法回显数据到UI层:

public class TestPresenter extends BasePresenter<TestView> {
    AbsService mAbsService;

    @Inject
    public TestPresenter(AbsService absService) {
        this.mAbsService=absService;
    }
    public void test(){      
           mAbsService.test().subscribe(test->getView().show(test));
    }
}

最后是Model层,这边用test方法模拟从服务器获取数据返回"test":

public class AbsService {

   ......
    public Observable<String> test(){
        return Observable.create(f->{
            f.onNext("test");
        });
  .......
}

至此,整个流程完成,即用户点击add按钮,TestActivityFragment 调用presenter的test方法,在presenter调用AbsService 的test方法,presenter得到返回数据并且使用TestView的Show方法回显数据,最终在TestView显示这个数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Android MVP技术栈是一种在Android开发中常用的架构模式,它将应用程序分为三个主要的组件:Model(模型)、View(视图)和Presenter(展示者)。这种架构模式的目的是将业务逻辑与界面逻辑分离,使代码更加清晰、可维护和可测试。 具体来说,Java Android MVP技术栈的组件包括: 1. Model(模型):负责处理数据的获取、存储和处理。它可以是从网络获取数据的API接口、数据库操作类或其他数据源。 2. View(视图):负责展示数据和与用户进行交互。它可以是Activity、Fragment或自定义的View。 3. Presenter(展示者):作为View和Model之间的中间人,负责处理业务逻辑和协调View和Model之间的通信。它从Model获取数据,并将数据传递给View进行展示,同时也接收来自View的用户交互事件,并根据需要更新Model。 通过使用MVP技术栈,可以实现以下优点: 1. 分离关注点:将业务逻辑和界面逻辑分离,使代码更加清晰、易于理解和维护。 2. 可测试性:Presenter负责处理业务逻辑,可以通过单元测试来验证其正确性,而View则可以通过UI测试来验证其交互行为。 3. 可扩展性:由于各个组件之间的解耦,可以更容易地对应用程序进行扩展和修改。 4. 可复用性:Presenter和Model可以在不同的View中重用,提高代码的复用性。 在实际开发中,可以使用第三方库来帮助实现MVP架构,例如Google官方推荐的Dagger2用于依赖注入、RxJava用于异步操作和事件处理、Retrofit用于网络请求等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值