Android MVP框架学习实践

五五六六七七八八        

        作为一名大三在读的学生,想着自己的大学生活只剩下一年了,有了些许紧迫感,于是就打算找一份实习工作来增加自己的项目实战经验。   

        想着互联网公司都基本都有现成的项目,实习的话最多也就是对原有的代码修改,增加功能?所以最后进了一家不大不小的外包公司,想体验一下一个商业项目从落地到成型的过程。进入公司以后,被分配到一个给国外发包方做的项目(我只是个实习生萌新啊,第一个项目就给外国人做,这样好吗喂)。

        作为一个有过Android开发经验的菜鸟,也算在各个服务外包比赛中拿过些奖的人(虽然大学的这种比赛很水,但是也是有些开发的工作量的,哈哈),我对一个项目的构成,如何开发等等,都有些了解。由于之前的比赛项目经验,都是我一个人独立开发Android端,所以对项目的架构、框架等都是怎么方便怎么来,不怎么考虑代码的可读性,可复用性之类的东西(进入公司实习之后才发现,这些东西相当重要啊),之前为了方便,把业务逻辑,视图绑定啥的都一股脑的放入activity类中,导致activity类过于臃肿,给代码的阅读和修改都带了极大的不便,但是由于自己的项目经验缺乏,从一开始就给自己挖下的坑,之后不但很难填,而且还越挖越深(单手捂眼笑哭.jpg),幸好只是我一个人自己开发,不然要是协作开发的话,估计会被小伙伴怒锤。

        进入公司以后,从Android带队开发大佬那边拿到了项目的基础开发框架


品了一下,从我裸考过六级的水平来看,嗯,这个presenter应该是之前在书上看到过的MVP中的P没差了。从网上找找资料学习学习。

        ok,进入正题。

        MVP是Model、View、Presenter的缩写。Model表示模型,主要负责数据的加载;VIew表示视图主要负责视图绑定,界面的展示,界面逻辑跳转等;Presenter是表示器,主要作为View和Model的中间人,完成他们之间的交互,从而实现高内聚低耦合的思想。画了一幅它们之间的关系图。


        可能这样有点抽象,talk is cheap, show you the code.

        先来看看我们项目组Android大佬的MVP框架实现,

MainActivity.java:

public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View {

    @BindView(R.id.tv_doubanbook)
    TextView mTvDoubanbook;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initTitleBar() {

    }

    @Override
    protected void initData() {
        //初始化Presenter
        mPresenter = new MainPresenter(this);
        //调用Presenter的getbook方法,去model调取数据
        mPresenter.getBooks();
    }

    @Override
    public void onBooksGeted(DouBanBook douBanBook) {
        //回调函数, douBanBook 即为Presenter获得的数据  可用于在界面上展示
        mTvDoubanbook.setText(douBanBook.toString());
    }

    @Override
    protected void initListener() {

    }

    @Override
    public void onClick(View view) {

    }
    
}
 

MainContract.java:

public interface MainContract {
    interface View extends IBaseView {
        //当数据presenter完成数据加载,调用此方法将数据展示在view上
        void onBooksGeted(DouBanBook douBanBook);
    }

    interface Presenter extends BasePresenter {
        //从服务器端获取数据
        void getBooks();
    }

}

MainPresenter.java:

public class MainPresenter extends BasePresenterImpl<MainContract.View> implements MainContract.Presenter {
    public MainPresenter(MainContract.View mView) {
        super(mView);
    }

    @Override
    public void getBooks() {
        mRxManager.add(RetrofitManager.getInstance()
                .getBooks()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableObserver<DouBanBook>() {
                    @Override
                    public void onNext(DouBanBook douBanBook) {
                        //数据获取成功,调用此方法,将数据展示到view上
                        mView.onBooksGeted(douBanBook);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                }));
    }
}

        大佬果然是大佬,已经对各种基类进行了封装,来方便我们这些萌新的开发。(上面的代码还用到了RxJava,emmmm其实这个对于我这个萌新来说也是还没有接触过的技术,之后也会更新RxJava相关的学习博客,要努力变强~)。

        我们会发现,其实上面这三个.java已经可以实现一个界面的完整逻辑,但是View有了,Presenter也有了,Model去哪了???还有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值