mvc mvp

作者: 微罗妮卡 | 来源:发表于2017-02-21 11:59 被阅读0次

    何为模式?

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

    mvc模式

    • modle: 包括对数据的获取,处理方法
    • view: 对view的显示进行控制
    • controller: 控制器,负责连接view和modle

    在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:负责绘制UI元素、与用户进行交互(在Android中体现为Activity);
    • View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试;
    • Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合);
    • Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
      其优点是解决了activity冗余的问题

    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);
                    }
                }
            }
        }
    

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

    相关文章

      网友评论

          本文标题:mvc mvp

          本文链接:https://www.haomeiwen.com/subject/shbywttx.html