关于MVP,关于android,不得不说这篇博客已经来的很晚了,这篇博客早就想写了,一直都在偷懒,就不给自己这么久的偷懒找借口了。虽然这篇文章po出来的比较晚,但是我所接触的程序员一些朋友之类的,大家也是最近才开始听说mvp ,还没有真正的应用到项目中去。
14年年底的时候各大android的论坛博客,关于android的架构的思考越来越多,我也一直在关注,也在14年年底开始模仿着去写,其实mvp,不算什么新的架构,都是做了很多年的cs模式的应用的win开发者,wpf开发者玩烂了的东西。 mvp的概念什么的都不用说了,大家应该都看了很多遍了,多说都是废话。
那么我们现在来在我们没接触到mvp之前大家都是用什么设计模式。开始,虽然很多人喜欢说自己的项目是MVC,但是话说回来,what ,where ,why。什么是MVC,你的项目里那里是controller,哪里是view,为何需要用mvc设计模式。
public class MainActvity extends BaseCommActivity<MainPresenter> implements IMainView { @ViewInject(R.id.mainlay) View mainlay; @Override protected Class<MainPresenter> getPsClass() { return MainPresenter.class; } @Override protected int getLayoutId() { return R.layout.activity_main; } @Override protected void initAllWidget() { mainlay.setOnClickListener(this); } @Override protected void clickView(View v) { switch(v.getId()) { case R.id.mainlay: { //showMsg(); } break; } } @Override public void showMsg() { //测试 toast("is showmsg methon"); } }
public interface IMainView extends IBaseCommView { //在原有IBaseView 的初上加一个方法 要求MainActivity必须重载这个方法 public void showMsg(); }
public class MainPresenter extends BaseCommPresenter { //请求 private static final int REQ_GETAPPLIST_MSG = 0x002123; private static final int RES_GETAPPLIST_MSG = 0x002124; private final String SOFT_JP_FLAG = "soft_jp_flag"; private static final String CURRENT_PAGE = "current_page"; private static final String PAGE = "page_size"; private static final String SOFT_TYPE = "soft_type"; @Override public void handMsg(Message msg) { switch (msg.what) { case REQ_GETAPPLIST_MSG: { MainRequest req = new MainRequest(); req.put(SOFT_JP_FLAG, 2 + ""); req.put(SOFT_TYPE, 1 + ""); req.put("soft_jh_type", 0 + ""); String mac = WifiUtil.getMacAddress(iView.getActivity()); req.put(CURRENT_PAGE, 1 + ""); req.put(PAGE, 10 + ""); req.put("mac", mac); req.setResPonseMsgWhat(RES_GETAPPLIST_MSG); sendHttpPost(req, MainResponse.class); iView.showProgressBar(); } break; case RES_GETAPPLIST_MSG: { iView.hideProgressBar(); if(msg.obj instanceof MainResponse) { MainResponse res=(MainResponse)msg.obj; if(res.isSuc()) { AppMainModel mainModel = res.getData(); iView.toast(mainModel.data.size() + ""); } else{ iView.toast(res.getMsg()); } } } break; } } @Override public void initData(Bundle saveInstnce) { getHandler().sendEmptyMessage(REQ_GETAPPLIST_MSG); } }
可以看代码 activity中没有MainPresenter这个字段,只是在getPsClass() 的时候返回的Presenter的类型,这个getPsClass() 的调用是在activity的基类里面写的,在基类中实例化了presenter,实例化之后,presenter会执行绑定IView,IView就是this了,基类的act在基类里的消息机制的处理方法直接传递到了presenter中执行了,所以,这样写Mainactivity写的代码就超级少了。管理都在基类里面了。这种写法真的好爽!哈哈哈!
如果你也在研究mvp的更好的方式,更好的使结构更清晰,更加加快开发速度,那你看下我的代码,找下是否有你需要,来解决你的一些困惑,我也是才疏学浅,希望大家多多指点相互学习。
代码地址: http://code.taobao.org/svn/frame_mvp/版权声明:本文为原创文章,如需转载,请先发邮件到602807247@qq.com 请求博主允许转载。
原文地址:http://blog.csdn.net/weizongwei5/article/details/47612545