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

Wesley13
• 阅读 625

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联系比较紧密的问题。 **”。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
unity工程师面试知识点之MVC架构+观察者模式
所谓设计模式通俗点理解就是解决固定问题的套路。而说起观察者模式又不得不提起客户端框架设计中最常用的实现逻辑:MVC架构观察者模式。MVC架构中的M、V、C分别是model、view、control的缩写。model:模型,处理数据逻辑部分view:界面,处理数据显示部分control:控制器,模型和界面的沟通桥梁,负责从视图读取数据,控制用
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这