一、MVP 是什么概疆?
MVP逗威,全稱 Model-View-Presenter,它是從經(jīng)典的 MVC 演變而來的一個開發(fā)思想岔冀。應(yīng)用分層結(jié)構(gòu)凯旭,使得各層結(jié)構(gòu)各司其職,其中 Model 層負責提供數(shù)據(jù)使套,View 層負責頁面展示罐呼,Presenter 負責業(yè)務(wù)邏輯處理。
二侦高、MVP 有什么好處嫉柴?
MVC.png
MVP.png
上面兩張圖分別是 MVC 和 MVP 的結(jié)構(gòu)層次劃分圖,可以看到 MVP 相較于 MVC 的優(yōu)點在于 View 和 Model 層間的完全解耦奉呛。
三计螺、在 android 項目中搭建自己的 MVP 框架
現(xiàn)有 android 項目中夯尽,為了便于更好的開發(fā)和維護,基本采用 MVP 框架進行開發(fā)登馒。下面我們將一步一步進行 MVP 框架的搭建匙握。
public interface IBaseView {
Activity getActivity();
}
public abstract class EABaseActivity<P extends EABasePresenter> extends AppCompatActivity
implements IBaseView {
private boolean isFirst = true;
protected P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
generatePresenter();
setContentView(getLayoutId());
findViews();
addEvents();
if (presenter != null) presenter.onBundle(getIntent().getExtras());
}
private void generatePresenter() {
Type type = getClass().getGenericSuperclass();
try {
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
presenter = (P) ((Class) types[0]).newInstance();
presenter.setView(this);
} catch (Exception e) {
e.printStackTrace();
}
}
protected abstract int getLayoutId();
protected void findViews() {
}
protected void addEvents() {
}
public Activity getActivity() {
return this;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (presenter != null) {
presenter.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected void onStart() {
super.onStart();
if (isFirst) {
if (presenter != null) presenter.onAttach();
isFirst = false;
}
}
@Override
protected void onResume() {
super.onResume();
if (presenter != null) presenter.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
presenter.onDetach();
presenter = null;
}
}
}
Activity 的基類。
public class EABasePresenter<V extends IBaseView> {
protected V view;
public void setView(V view) {
this.view = view;
}
public void onBundle(Bundle bundle) {
}
public void onAttach() {
}
public void onResume() {
}
public void onDetach() {
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
四陈轿、總結(jié)
基本思想大體如此圈纺,還是要根據(jù)不同的項目進行自己調(diào)整,當然這個框架還很不完善麦射,在此只不過是拋塊磚罷了赠堵。