android应用框架mvvm,Android应用设计框架MVC、MVP、MVVM

MVC设计架构

Model View

Controller简称MVC。一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

e7edcf60b6448c5b838f4b963b354bbf.png

Android中的MVC

l视图层(View)

一般采用XML文件进行界面的描述,这些XML可以理解为AndroidApp的View。使用的时候可以非常方便的引入。同时便于后期界面的修改。逻辑中与界面对应的id不变化则代码不用修改,大大增强了代码的可维护性。

l控制层(Controller)

Android的控制层的重任通常落在了众多的Activity的肩上。这句话也就暗含了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。使用Activity将View视图显示和Model模型数据处理隔离开。

l模型层(Model)

针对业务模型,建立的数据结构和相关的类,就可以理解为AndroidApp的Model,Model是与View无关,而与业务相关的。对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。

MVC的缺点

在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户 界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

MVP设计架构

MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。

b363037c640cc0591260297bfd51982c.png

在MVP模式里通常包含3个要素(加上View interface是4个):

lView:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)

lModel:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)

lPresenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。

lView interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试

在MVP模式中,处理复杂逻辑的Presenter是通过interface与View(Activity)进行交互的,可以通过自定义类实现这个interface来模拟Activity的行为对Presenter进行单元测试。

MVP模式的优点:

l在MVP中,Activity的代码不臃肿;

l在MVP中,Model(IModel的实现类)的改动不会影响Activity(View),两者也互不干涉,而在MVC中会;

l在MVP中,IView接口可以实现方便地对Presenter的测试;

l在MVP中,Presenter可以用于多个视图,但是在MVC中的Activity就不行。

MVP代码实例

1.建立Bean

public class UserBean {

private String mFirstName ;

private String mLastName ;

public UserBean (String firstName, String lastName) {

this .mFirstName = firstName;

this .mLastName = lastName;

}

public String getFirstName() {

return mFirstName ;

}

public String getLastName() {

return mLastName ;

}

}

2.建立Model

处理业务逻辑,提供数据读写接口

public interface IUserModel {

void setID (int id);

void setFirstName (String firstName);

void setLastName (String lastName);

int getID();

UserBean load (int id);//通过id读取user信息,返回一个UserBean

}

3.Presenter控制器

建立presenter(主导器,通过iView和iModel接口操作model和view),activity可以把所有逻辑给presenter处理,这样java逻辑就从手机的activity中分离出来。

public class UserPresenter {

private IUserView mUserView ;

private IUserModel mUserModel ;

public UserPresenter (IUserView view) {

mUserView = view;

mUserModel = new UserModel ();

}

public void saveUser( int id , String firstName , String lastName) {

mUserModel .setID (id );

mUserModel .setFirstName (firstName );

mUserModel .setLastName (lastName );

}

public void loadUser( int id ) {

UserBean user = mUserModel .load (id );

mUserrView .setFirstName (user .getFirstName ());//通过调用IUserView的方法来更新显示

mUserView .setLastName (user .getLastName ());

}

}

4.View视图

建立view(更新ui中的view状态),提供需要操作当前view的方法,也是接口

public interface IUserView {

int getID();

String getFristName();

String getLastName();

void setFirstName (String firstName);

void setLastName (String lastName);

}

5.UserActivity

UserActivity实现了IUserView及View.OnClickListener接口,同时有一个UserPresenter成员变量。

public class UserActivity extends Activity

implements OnClickListener ,

IUserView {

private EditText mFirstNameEditText , mLastNameEditText , mIdEditText ;

private Button mSaveButton , mLoadButton ;

private UserPresenter mUserPresenter ;

......

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch ( v. getId()) {

case R .id .saveButton :

mUserPresenter .saveUser

(getID (), getFristName (),

getLastName ());

break ;

case R .id .loadButton :

mUserPresenter .loadUser

(getID ());

break ;

default :

break ;

}

}

}

View只负责处理与用户进行交互,并把数据相关的逻辑操作都扔给了Presenter去做。而Presenter调用Model处理完数据之后,再通过IUserView更新View显示的信息。

MVVM

MVVM中的VM是ViewModel的缩写。ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data

Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。

919f33bc75a3902c005c3b9a6c843a50.png

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值