五五六六七七八八
作为一名大三在读的学生,想着自己的大学生活只剩下一年了,有了些许紧迫感,于是就打算找一份实习工作来增加自己的项目实战经验。
想着互联网公司都基本都有现成的项目,实习的话最多也就是对原有的代码修改,增加功能?所以最后进了一家不大不小的外包公司,想体验一下一个商业项目从落地到成型的过程。进入公司以后,被分配到一个给国外发包方做的项目(我只是个实习生萌新啊,第一个项目就给外国人做,这样好吗喂)。
作为一个有过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去哪了???还有