android与mvc模式,Android中MVP模式与MVC模式比較(含演示样例)

MVP

介绍

MVP模式(Model-View-Presenter)是MVC模式的一个衍生。

主要目的是为了解耦,使项目易于维护。

Model 依旧是业务逻辑和实体模型

View 常常由Activity实现,包括Presenter的引用。所要做的就是当有交互时。调用Presenter里的相应方法。

Presenter 负责完毕View于Model间的交互。从Model里取数据,返回给View处理好的数据。

为什么使用MVP

在以往的Android开发中,Activity并非一个标准的MVC模式中的Controller, 它的载入应用的布局和初始化用户界面,接受并处理来自用户的操作请求,进而作出响应。可是随着界面及其逻辑的复杂度不断提升,Activity类的职责不断添加,以致变得庞大臃肿。当我们将当中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity事实上就是MVP模式中View。它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类)。同一时候自己也会处理一些简单的逻辑(复杂的逻辑交由Presenter处理)。

对于測试来说。在MVP模式中,处理复杂逻辑的Presenter是通过interface与View(Activity)进行交互的。

我们能够通过自己定义类实现这个interface来模拟Activity的行为对Presenter进行单元測试。省去了大量的部署及測试的时间。

MVC介绍

Model 是应用程序中用于处理应用程序数据逻辑的部分。

View 是应用程序中处理数据显示的部分。

Controller是应用程序中处理用户交互的部分。

详细介绍请戳这里

比較

MVP模式:

View不直接与Model交互 。而是通过与Presenter交互来与Model间接交互

Presenter与View的交互是通过接口来进行的,更有利于加入单元測试

通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑

MVC模式:

View能够与Model直接交互

Controller是基于行为的,而且能够被多个View共享

能够负责决定显示哪个View

演示样例

一个登陆注冊的样例。

6fd533e64e927ee43f3a62b27eace58f.png

文件夹结构

8a07629711a1e1f6fcec96b7c5064ac5.png

Model

Model为User的信息,项目里省略了。当然你也能够新建一个User类

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 ;

}

}

View

public class LoginActivity extends Activity implements LoginView, View.OnClickListener {

private ProgressBar progressBar;

private EditText username;

private EditText password;

private LoginPresenter presenter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

progressBar = (ProgressBar) findViewById(R.id.progress);

username = (EditText) findViewById(R.id.username);

password = (EditText) findViewById(R.id.password);

findViewById(R.id.button).setOnClickListener(this);

presenter = new LoginPresenterImpl(this);

}

@Override public void onClick(View v) {

presenter.validateCredentials(username.getText().toString(), password.getText().toString());

}

...

...

能够看到LoginActivity implements了两个接口。LoginView, View.OnClickListener。LoginView是在Presenter中用来与Activity通信的。在onClick()方法中调用了presenter进行事务处理。

LoginView.java

public interface LoginView {

void showProgress();

void hideProgress();

void setUsernameError();

void setPasswordError();

void navigateToHome();

}

Presenter

public class LoginPresenterImpl implements LoginPresenter, OnLoginFinishedListener {

private LoginView loginView;

private LoginInteractor loginInteractor;

public LoginPresenterImpl(LoginView loginView) {

this.loginView = loginView;

this.loginInteractor = new LoginInteractorImpl();

}

@Override public void validateCredentials(String username, String password) {

if (loginView != null) {

loginView.showProgress();

}

loginInteractor.login(username, password, this);

}

@Override public void onUsernameError() {

if (loginView != null) {

loginView.setUsernameError();

loginView.hideProgress();

}

}

...

...

能够发现。在onUsernameError()方法中。把处理好的结果通过LoginView接口返还给Activity进行显示。

到此为止。整个流程就跑通了。M存储数据,V交互。P处理逻辑。

V和P之间通过接口通信。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值