当前位置: 首页 > 知识库问答 >
问题:

关于MVP和MVVM的几点混淆

阴英武
2023-03-14

关于MVP和MVVM的几点混淆

在问这个问题之前,我读了一篇关于MVP和MVVM的文章。(例如:http://martinfowler.com/eaadev/uiarchs.html)

    null

例如,富客户端应用程序将同时使用本地数据库和远程服务。

在业务层,有两种对象!

域对象,它是从我的本地数据库中读取的。

在MVP中,只有一个“模型层”,所以我可以在这个模型层中管理和存储domian对象和session对象。所有视图特殊状态都在视图中,不会持久化。演示者将控制视图状态,并在模型和视图之间同步数据。

在MVVM中,有两个“模型层”(模型和ViewModel),视图状态和模型的副本存储在ViewModel中。那么复制的模型是多余的吗?

还是仅仅将外部服务调用放在分离的模型层中?

共有1个答案

相云
2023-03-14

>

  • MVC最初将模型定义为“存在于计算机中的数字模型”,而不是“人类用户的心智模型”。因此,它是一个非常模糊的概念,可以涵盖您想要的任何实际情况,尽管后来出现的无数MV*实现引入了更多的固执己见的定义。

    思想流派中的一个传统冲突是,MVC/P中的模型应该是一个领域对象,还是仅仅是呈现给用户的内容的反映。MVVM给出了一个明确的答案(参见2.和3.)

    不,因为ViewModel只是一个暂时的内存结构,代表屏幕上显示的内容。如果说MV*模式中有什么要坚持的,那就是模型。

    例如,UserCredentials模型对象将包含登录和密码字段,而相应的UserCredentialsViewModel可能包含一个额外的ConfirmPassword字段和一个VerifyPasswordMatchesConfirm()方法,因为这就是显示给用户的。

    另一个主要区别是MVVM中存在基于事件的数据绑定,这在MVP中是不存在的。一个结果是,您经常会看到在客户端使用MVVM模式,其中有允许这种绑定的技术(Javascript、WPF),而MVP主要是在服务器端使用(主要是ASP.NET)。MVP并不比MVVM好,它们只是适合不同的生态系统。

    Presenter和ViewModel正如它们的名字所暗示的,是UI猛兽。如果您将DTO传递给他们,他们可能能够看到远程服务调用产生的DTO,但他们不应该调用远程服务,因为这样做不是表示对象的责任。您应该在一个单独的基础结构服务中这样做。

  •  类似资料:
    • FlyTour是Android MVVM+MVP+Dagger2+Retrofit+RxJava+组件化+插件组成的双编码架构+双工程架构+双语言Android应用开发框架,通过不断的升级迭代该框架已经有了十个不同的版本,5.0之前工程架构采用gradle配置实现组件化,5.0之后的工程架构采用VirtualAPK实现了插件化,5.0之前采用Java编码实现,5.0之后采用Kotlin编码实现,编

    • 我对两个说明都有点困惑。首先,让我们放弃扫描值为0和未定义的/bsr或bitsize/lzcnt结果的特殊情况--这个区别很明显,不是我的问题的一部分。 让我们取二进制值 计数,返回到位0(即lsb)的索引或距离。 如果CPU上没有可用的BMI,如何模拟为?或者在的情况下位0是MSB?英特尔规范中的两个“代码操作”也不同,一个从左边计数或索引,另一个从右边计数或索引。 也许有人能对此有所了解,我没

    • young gc是不是针对所有的新生代region进行回收?我的理解是young gc会回收全部的新生代Region,并调整Eden区数量来满足软实时性要求; Oracle文档中指出在并发标记期间还可能进行额外的young gc,这不会破坏并发标记期间的内存布局么?比如现在正在进行并发标记,对于某个Eden Region A, 还未完成标记,此时若是发生young gc,A会被如何处理? 以及这位

    • 本文向大家介绍MVC、MVP和MVVM分别是什么_动力节点Java学院整理,包括了MVC、MVP和MVVM分别是什么_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 一、MVC MVC模式的意思是,软件可以分成三个部分。 视图(View):用户界面。 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下。 1.View 传送指令到 Co

    • 这里我只问一些关于wcf ssl和证书的基本问题 我是wcf的新成员,也是非常诚实的,我有基本的问题来理解SSL和证书。 5)SSL和证书有什么区别? 6)当我们在服务端使用证书时,使用和调用服务的客户端总是需要安装证书,如果不是,客户端需要安装证书时和不需要安装证书时,一个人告诉我,客户端只有在需要相互认证时才需要安装证书,但我不知道什么是相互认证? 我知道我问了很基本的问题。如果可能的话,请详

    • 本文向大家介绍关于mysql init_connect的几个要点总结,包括了关于mysql init_connect的几个要点总结的使用技巧和注意事项,需要的朋友参考一下 init_connect的作用 init_connect通常用于:当一个连接进来时,做一些操作,比如设置autocommit为0,比如记录当前连接的ip来源和用户等信息到一个新表里,当做登陆日志信息 使用init_connect