mvc mvp
2017-02-21 本文已影响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);
}
}
}
}
实在是不知道怎么写才好,先这样吧