Android开发中的mvc、mvp、mvvp模式

1) 安卓中开发模式的运用,为什么要使用模式?

不同的模式预示着不同的代码结构和代码拆分方法。

代码按照经典的开发模式去写,让我们的代码更加合理化了,更具备扩展性。就像搭建大楼一样,如果代码乱放,可能狗窝都搭建不出来。

A开发人员,你应该把代码写在哪里,怎么调用我架构里面的东西?通过架构限制开发人员,代码不能乱放!

最后把代码整合到一起!

对项目进行模块划分;

搭建整体的项目结构;

如果想走上管理层,就必须学一些架构上的内容!

2) 有哪些常用的开发模式?

常用的模式:mvc、mvp、mvvc

一、用户登录的实现:

新手会把所有的代码都堆砌在activity中,如果功能非常多,就会导致Activity中代码臃肿,进而可能导致线程阻塞以及可扩展性差!

把用户的输入封装成了一个user对象,这样做的好处是什么?  主要用于判断用户的输入是否为空?

进度条对话框的使用;ProgressDialog 类  new ProgressDialog();ProgressDialog.show();ProgressDialog.dismiss()

如何在子线程显示UI?runOnUIThread()方法

此时 activity中 存在联网操作,但是联网操作和对数据库的操作应该是属于模型类的!

public class MainActivity extends AppCompatActivity {

private EditText et_username;
private EditText et_password;
private ProgressDialog dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findView();
}

private void findView() {
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);

dialog=new ProgressDialog(this);
}

//执行登录操作
//修饰符不能private
public void login(View view) {
String username = et_username.getText().toString();
String password = et_password.getText().toString();
//把用户的输入封装到对象里面
final UserInfo userInfo = new UserInfo();
userInfo.name = username;
userInfo.password = password;

Boolean b = checkUserInfo(userInfo);
if (b) {
dialog.show();
//联网是耗时操作,要开启一个子线程
new Thread() {
@Override
public void run() {
//让主线程睡2s
SystemClock.sleep(2000);
if ("111111".equals(userInfo.name) && "111111".equals(userInfo.password)) {
dialog.dismiss();
//注意这里是子线程,不能更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
}
});
} else {
dialog.dismiss();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
});
}
}
}.start();
} else {
Toast.makeText(MainActivity.this, "用户名或密码为空", Toast.LENGTH_LONG).show();
}
}

//校验用户的输入
private boolean checkUserInfo(UserInfo userInfo) {
if (TextUtils.isEmpty(userInfo.name) || TextUtils.isEmpty(userInfo.password)) {
return false;
} else {
return true;
}
}
}

二、MVC模式在安卓中的体现(把网络请求拆分出去,其实应该对网络请求的结果进行接口回调到activity中):

按照MVC模式对Activity中的代码进行拆分:

把数据往上进行传递  m---->c---->v

模型 (操作数据库或者网络)---->控制层  activity---->界面  layout

比如网络操作:LoginNet  这个类中做什么事情呢:把数据发送到服务器端,并且拿到返回结果。

但是activity中并没有持有LoginNet  类的实例,要在activity中创建这个类的实例,并且调用其中的方法,传递参数(传递对象,map集合等);和界面有关系的代码不要写在网络模型类中(Activity类要持有网络请求类的实例)。

new Thread() {
@Override
public void run() {
LoginNet loginNet = new LoginNet();
boolean result = loginNet.sendLoginInfo(userInfo);
if (result){
dialog.dismiss();
//注意这里是子线程,不能更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
}
});
}else{
dialog.dismiss();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
});
}
}
}.start();

public class LoginNet {
/**
* 发送用户输入的数据
*
* @param userInfo
* @return
*/
public boolean sendLoginInfo(UserInfo userInfo) {
SystemClock.sleep(2000);
if ("111111".equals(userInfo.name) && "111111".equals(userInfo.password)) {
return true;
} else {
return false;
}
}
}

三、MVP模式在安卓中的体现:

使用mvc模式的缺点是:Activiy中存在两部分代码:业务相关+界面相关  v中的内容相对较少,反而c中的内容较多。

如果将Activity中的业务进行拆分的话: 就是mvp模式;把activity中的业务逻辑拆分出来。

mvp模式:把Activity中的业务逻辑才分出来形成p层,而模型层没有变化。

presenter包,处理和业务相关的代码,不要在activity中处理太多的业务逻辑

public class MainActivity extends AppCompatActivity implements IUserLoginListener {

private EditText et_username;
private EditText et_password;
private ProgressDialog dialog;

private UserLoginPresenter userLoginPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
}

private void findView() {
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);
dialog = new ProgressDialog(this);

userLoginPresenter = new UserLoginPresenter(this);
}

//执行登录操作
//修饰符不能private
public void login(View view) {
String username = et_username.getText().toString();
String password = et_password.getText().toString();
//把用户的输入封装到对象里面
final UserInfo userInfo = new UserInfo();
userInfo.name = username;
userInfo.password = password;

Boolean b = userLoginPresenter.checkUserInfo(userInfo);
if (b) {
dialog.show();
//联网是耗时操作,要开启一个子线程
userLoginPresenter.login(userInfo);
} else {
Toast.makeText(MainActivity.this, "用户名或密码为空", Toast.LENGTH_LONG).show();
}
}

public void success() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
}
});
}

public void fail() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
});
}
}

/**
* Created by Administrator on 2016/5/5 0005.
* 主要用于处理业务逻辑
*/
public class UserLoginPresenter {

protected IUserLoginListener view;
public UserLoginPresenter(IUserLoginListener iUserLoginListener) {
this.view = iUserLoginListener;
}

//校验用户的输入
public boolean checkUserInfo(UserInfo userInfo) {
if (TextUtils.isEmpty(userInfo.name) || TextUtils.isEmpty(userInfo.password)) {
return false;
} else {
return true;
}
}

public void login(final UserInfo userInfo){
new Thread() {
@Override
public void run() {
UserLoginNet loginNet = new UserLoginNet();
boolean result = loginNet.sendLoginInfo(userInfo);
if (result) {
//这里如何获取到MainActivity对象呢,调用其中的登录成功与失败的方法
view.success();
} else {
view.fail();
}
}
}.start();
}

}

class  UserLoginPresenter{

//  判断用户输入

//  处理登陆的业务逻辑

}

而在P类中,要获取activity的对象,才能调用activity中的方法:登陆成功和登陆失败; 通过P类构造函数获取.

在activity中创建p层的对象,然后调用其中的方法;先声明不去定义,定义的时候要特别注意。

mvp源码链接地址

四、MVVP模式异军突起:

时间: 2024-11-08 21:29:56

Android开发中的mvc、mvp、mvvp模式的相关文章

浅析前端开发中的 MVC/MVP/MVVM 模式

MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类问题而总结出的抽象方法,一种架构模式往往使用了多种设计模式. 要了解MVC.MVP和MVVM,就要知道它们的相同点和不同点.不同部分是C(Controller).P(Presenter).VM(View-Model),而相同的部分则是MV(Model-View). Model&View 这里有一个可

Android开发中无处不在的设计模式——原型模式

不知不觉这个系列已经写了三篇了,其实很早之前就想写设计模式了,只不过怕自己误人子弟没有提笔去写.后来在实际开发中,发现设计模式可以让一个开发人员融会贯通所学的知识,为了进一步巩固自己,就写下了这一些列文章.前面介绍了三个模式. Android开发中无处不在的设计模式--单例模式 Android开发中无处不在的设计模式--Builder模式 Android开发中无处不在的设计模式--观察者模式 本篇文章介绍的模式其实很简单,即原型模式,按照惯例,先看定义. 用原型实例指定创建对象的种类,并通过拷贝

Android开发中无处不在的设计模式——策略模式

这个系列停更了好久了,差不多可以重新拿起来更一篇了,这篇文章主要介绍策略模式.在这之前,先温习一下前面介绍的4种模式. 设计模式很重要! 设计模式很重要! 设计模式很重要! 重要的事说三遍!!! Android开发中无处不在的设计模式--单例模式 Android开发中无处不在的设计模式--Builder模式 Android开发中无处不在的设计模式--观察者模式 Android开发中无处不在的设计模式--原型模式 接着看下策略模式的定义 策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它

Android开发中的MVC设计模式

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

讨论Android开发中的MVC设计思想

最近闲着没事,总是想想做点什么.在时间空余之时给大家说说MVC设计思想在Android开发中的运用吧! MVC设计思想在Android开发中一直都是一套比较好的设计思想.很多APP的设计都是使用这套方案完成架构设计的. 谈到MVC我想分为以下几个点分点突进. 1.什么是MVC框架. 2.MVC如何工作 3.MVC的缺点 4.Android之MVC设计模式. 一.什么是MVC框架. MVC英文即Model-View-Controller,即把一个应用的输入.处理.输出流程按照Model.View.

Android开发中无处不在的设计模式——动态代理模式

继续更新设计模式系列,写这个模式的主要原因是最近看到了动态代理的代码. 先来回顾一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式--Builder模式 - Android开发中无处不在的设计模式--观察者模式 - Android开发中无处不在的设计模式--原型模式 - Android开发中无处不在的设计模式--策略模式 动态代理模式在Java WEB中的应用简直是随处可见,尤其在Spring框架中大量的用到了动态代理:算是最重要

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V

MVP模式在Android开发中的最佳实践

这篇文章拖了好久了,一直存在草稿箱里没有继续写,趁今天有空,撸撸完. 回想一下,你刚刚学习Android的时候,总会看到一些书上写着,Android使用的是MVC模式,Activity就是一个Controller,或许那个时候,你没有什么深刻的体会.随着经验的积累.你发现,Activity既是Controller,掌管着许许多多的业务逻辑,同时它也作为View的一部分,控制着视图层的显示.久而久之,这个Controller便显得过于重,职责不再那么单一. 于是,再后来,为了使Activity的职

Android开发中的MVP架构(转)

写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn=1cd10bd9efaac7083575367a8b4af52f&scene=1&srcid=0910ARzPpBvVYPI1NDBZnixa#wechat_redirect 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目