热门前沿知识相关面试问题

MVC【最常用】:

  • MVC的定义:
    M:业务逻辑处理。【业务MODEL】
    V:处理数据显示的部分。【如xml布局文件】
    C:Activity处理用户交互的问题。【也就是Activity在MVC中扮演着C的角色】

  • MVC的特点:
    ①、耦合性低。
    ②、可扩展性好。
    ③、模块职责划分明确。

  • MVC的实例详解:

    而当请求成功之后则会在Activity中进行回调处理:

    也就是Activity业务控制的作用,MVC的C的角色。

  • 总结:
    ①、利用MVC设计模式,使得项目有了很好的可扩展和维护性。
    ②、controller(控制器)是一个中间桥梁的作用。
    ③、什么时候适合使用MVC模式呢?当一个项目很小,

MVP【如今越来越流行】:

它的由来也是基于MVC框架的进一步改良,对于Activity的C层里面既有业务代码,也有显示层的东东,这就显示Activity这一层显得非常的冗余和臃肿,所以下面来了解一下MVP:

MVP定义:

M:依然是业务逻辑和实体模型。
V:对应于Activity,负责View的绘制以及与用户交互。

P: 负责完成View与Model之间的交互。【这是与MVC最大的区别】
下面用一张图来直观的感受一下MVC和MVP的区别:

可以看到MVC中的model与C和V都有关联,而在MVP中Model只与P层关联,所以MVC与MVP最大的区别就在于MVC的M是直接可以与V进行交互的,而在MVP中M只与P进行交互。 

MVP实例讲解:

下面以用户登录功能为例,先看一下代码的结构:

下面具体来看一下代码,先看M层:

然后业务层登录方法:

而接着到View层了,这里需要以接口的形式来定义,具体如下:

然后在Activity中去实现这些接口,具体如下:

接着再来看一下P类的设计,这也是MVP最独特的,具体如下:

从这个P中可以看到就是用来控制业务逻辑并调用显示层的一些接口来达到组装的效果。 

MVVM【用得较少】:

它是Model-View-ViewModel的缩写,这个反正在实际开发中用得比较少,虽说它是更高级的一种模式,不过也是在面试中会大量被问到的,所以也需要对其进行了解,先来看一张图:

1、View:对应于Activity和XML,负责View的绘制以及与用户交互,它是不能做任何与业务相关的操作。

2、Model:实体模型,这跟咱们平常定义的Model层是不一样的。

3、ViewModel:负责完成View与Model之间的交互,负责业务逻辑。它不能做任何与UI相关的操作,也就是不能持有任何View的引用。

关于MVVM与MVP的区别可以用这篇博客【https://www.jianshu.com/p/a15d6e68d93f】所介绍的,如下:

如博主所说明的:“可以看到 ViewModel 承担了 Presenter 中与 view和 Model 交互的职责,与 MVP模式不同的是,VM与 V 之间是通过 Datebingding 实现的,而 P是持有 View 的对象,直接调用 View 中的一些接口方法来实现。ViewModel可以理解成是View的数据模型和Presenter的合体。**它通过双向绑定(松耦合)解决了MVP中Presenter与View联系比较紧密的问题。 **”。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )