关于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