mvc mvp

2017-02-21  本文已影响0人  微罗妮卡

何为模式?

模式,就是大众通用,重点的可以降低程序的耦合度,有时像一种约定.模式在程序员的世界里应该就像英语中的各种语法格式一般,一方面是正确的表达方式,另一方面也可以方便让别人阅读.一直觉得程序写的简单可以方便别人阅读就是最好的了,不需要特别高大上的东西,当然并不是所谓的流水帐,还要懂得游戏该有的规则.

mvc模式

在android 中,modle 对应的是获取网络数据的task,view---布局, controller--activity.但实际activity也负责了一部分view的职责.一部分molde的职责,使得activity十分冗余.

代码结构

order
--task
----OrderTask
--activity
-----OrderActivity

package com.bocom.ebus.order;
import android.view.View;
import com.bocom.ebus.BaseActivity;
import com.bocom.ebus.Const;
import com.bocom.ebus.R;
import com.zhy.http.okhttp.requestBase.TaskListener;


public class OrdertActivity extends BaseActivity {
    
    private View rootView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);
        initTitle();
        initView();
        initData();
    }
    private void initTitle() {
        setTitle(R.string.title_activity_buy_ticket);
    }

    private void initIntent() {
        Intent intent = getIntent();
        id = intent.getStringExtra(Const.EXTRA_RUTE_ID);
    }

    private void initView() {
        rootView = bindView(R.id.root_view);
    }

   
    private void initData() {
       LoadOrderTask.LoadOrderTaskParam param = new LoadOrderTaskTask.LoadOrderTaskParam();
        param.id = id;
        orderTaskListener = new LoadOrderTaskListener();
          LoadOrderTask task = new    LoadOrderTask(orderTaskListener, OrderResult.class, param);
        task.execute();
    }

    private class LoadOrderTaskListener implements TaskListener<OrderResult> {
        private Dialog dialog;
        @Override
        public void onTaskStart(TaskListener<GetAllTicketResult> listener) {
            dialog = UIUtils.showDialog(BuyTicketActivity.this);
        }

        @Override
        public void onTaskComplete(TaskListener<GetAllTicketResult> listener, GetAllTicketResult result, Exception e) {
            UIUtils.dismissDialog(dialog);
            if (ExceptionTools.isNetError(e)) {
               //TODO
                return;
            }
            if (result != null) {
            refreshUI(result);
            }
        }

        pubilc void refreshUI(OrderResult result){
            //TODO
         }
            @Override
        protected void onDestroy() {
             super.onDestroy();
        }
}

mvp模式

View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。
Presenter与View的交互是通过接口来进行的。
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。

代码结构:
order
--task
----OrderTask
--presenter
----OrderPresenter
--view
----IOrderView
--modle
----IOrderBiz
----OrderBiz
--Activity
----OrderActivity

OrderActivcity

public class OrderActivity extend BaceActivity implement IOrderView{
    private OrderPresenter presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay_crowdfunding);
        setTitle(R.string.title_activity_payment);
        initIntent();
        initView();
        initPresenter();
        initData();
    }
   private void initPresenter(){
        presenter = new OrderPersenter(OrderActivity.this);
  }
  private void initData(){
        presenter.loadOrderInfo();
  }

   @Override
    public void refreshUI(CrowdLine crowdLine) {
      //TODO
    }
}

OrderPresenter

public class OrderPresenter {
    private IOrderBiz orderBiz;
    private Activity context;
    private IOrderView orderView;

    public OrderPresenter(IOrderView orderView) {
        this.orderView = orderView;
       orderBiz = new orderBiz();
        context = (Activity) orderView;
    }

    public void loadOrderData(String id) {
        orderBiz.loadOrderData(new orderTaskListener(), id);
    }


    public class 0rderTaskListener implements TaskListener<LoadOrderResult> {

        @Override
        public void onTaskStart(TaskListener<LoadOrderResult> listener) {
            orderView.showLoading();
        }

        @Override
        public void onTaskComplete(TaskListener<LoadOrderResult> listener, LoadOrderResult result, Exception e) {
            orderView.hideLoading();
            if (ExceptionTools.isNetError(e)) {
               orderView.hideRootView();
               orderView.showErrorNet();
                return;
            }

            if (result != null) {
                if(result.isSuccess()){
                    orderView.hideErrorNet();
                    orderView.showRootView();
                    orderView.refreshUI(result.data);
                }
            }
        }
    }

实在是不知道怎么写才好,先这样吧

上一篇下一篇

猜你喜欢

热点阅读