gpt4 book ai didi

design-patterns - 关于 MVP 和 MVVM 的一些混淆

转载 作者:行者123 更新时间:2023-12-03 10:17:36 32 4
gpt4 key购买 nike

关于 MVP 和 MVVM 的一些混淆

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

但是当开始一个富客户端应用程序开发时,我对这两种模式仍然有些困惑。

  • Model 在 MVP 和 MVVM 中的含义是什么?

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

    在业务层,有两种对象!

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

    用于保持持久连接的 session 对象(例如:异步监视在线用户)

    Domain 对象是正确的模型,但是我是否需要一个特殊的模型层来管理在线用户(或字符消息),然后映射到 ViewModel?还是直接将这些数据设置为 ViewModel? (映射是多余的吗?由于一个ViewModel可以有多个view,ViewModel和Model很相似)
  • 在 MVVM 中,ViewModel 可以持久化到数据库吗?

  • 例如,想象一个聊天应用程序,即使您在离线环境中打开该应用程序,您仍然应该能够在聊天窗口中看到最近的消息。

    但是这些最近的消息都在 ViewModel 中,我们应该将 ViewModel 持久化到数据库吗? (它们究竟是 Model 还是 ViewModel?)
  • MVP 比 MVVM 更好吗?

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

    在 MVVM 中,有两个“模型层”(Model 和 ViewModel), View 状态和 Model 的副本存储在 ViewModel 中。那么Model的副本是多余的吗?
  • Presenter 或 ViewModel 是否应该能够看到特殊外部服务的数据传输对象 (DTO)?

  • 或者只是将外部服务调用放在单独的模型层中?

    很感谢 :-)

    最佳答案

  • MVC 最初将模型定义为“digital model that exists in the computer”,而不是“人类用户的心理模型”。因此,这是一个非常模糊的概念,几乎可以涵盖您想要的任何现实,尽管此后出现的无数 MV* 实现引入了更多固执己见的定义。

    思想流派中的一个传统冲突是 MVC/P 中的模型应该是一个领域对象还是只是对呈现给用户的内容的反射(reflect)。 MVVM 给出了明确的答案(参见 2. 和 3.)
  • 不,因为 ViewModel 只是一个临时的内存结构,代表屏幕上显示的内容。如果要在 MV* 模式中坚持下去,那就是模型。
  • MVVM 的存在试图将业务模型 (M) 与 UI 屏幕 (VM) 的数据和行为分开,MVP 并未明确说明这一区别。在 MVVM 中没有模型的两个副本,M 和 VM 不是冗余的,因为它们并不总是具有相同的数据并且它们从不具有相同的行为。

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

    另一个主要区别是基于事件的数据绑定(bind)的存在
    在 MVP 中不存在的 MVVM 中。一个后果是你会经常
    查看客户端使用的 MVVM 模式
    允许这种绑定(bind)的技术(Javascript,WPF),而 MVP 是
    主要用于服务器端(主要是 ASP.NET)。 MVP 并不比 MVVM 好,它们只是适合不同的生态系统。
  • 顾名思义,Presenter 和 ViewModel 是 UI 野兽。如果您将 DTO 传递给他们,他们可能会看到远程服务调用产生的 DTO,但他们不应该调用远程服务,因为这样做不是表示对象的责任。您应该在单独的基础架构服务中执行此操作。
  • 关于design-patterns - 关于 MVP 和 MVVM 的一些混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871877/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com