Model view controller 这些图中箭头的图例是什么(MVC-MVP-MVVM)?

Model view controller 这些图中箭头的图例是什么(MVC-MVP-MVVM)?,model-view-controller,mvvm,mvp,Model View Controller,Mvvm,Mvp,我试图理解MVC/MVP和MVVM模式之间的主要区别。我找到了这3个图表,但我不确定是否理解它们。你能帮我解释一下虚线和连续线的图例是什么吗 来自维基百科定义的MVC 来自微软MSDN网站的MVP 来自Microsoft MSDN网站的MVVM 我认为虚线是间接引用 我对MVC或MVP不太熟悉,但在MVVM中,视图引用了视图模型,而视图模型引用了模型,它由实线表示 模型可以广播消息或引发由视图模型拾取的事件通知,视图模型可以发布由视图拾取的事件,但是这些对象不应该直接引用其他对象,因此它们是

我试图理解MVC/MVP和MVVM模式之间的主要区别。我找到了这3个图表,但我不确定是否理解它们。你能帮我解释一下虚线和连续线的图例是什么吗

来自维基百科定义的MVC

来自微软MSDN网站的MVP

来自Microsoft MSDN网站的MVVM

我认为虚线是间接引用

我对MVC或MVP不太熟悉,但在MVVM中,
视图
引用了
视图模型
,而
视图模型
引用了
模型
,它由实线表示

模型
可以广播消息或引发由
视图模型
拾取的事件通知,
视图模型
可以发布由
视图
拾取的事件,但是这些对象不应该直接引用其他对象,因此它们是间接引用。例如,程序员知道,在
模型
上引发事件通知的目的是使
视图模型
可以连接到事件并处理某些内容,但是
模型
本身从不引用
视图模型

如果要比较这些模式,应该注意,它们是非常不同的模式,只是碰巧对某些对象共享相同的命名约定。例如,MVC中的
模型
与MVVM中的
模型
不同。相反,MVC的
M+C
等同于MVVM的
VM
,MVC的
M
包含MVVM的
M
VM
两部分的混合
  • 实线是直拨电话
  • 虚线只是事件回调
  • MVC和MVP(被动视图)模式之间的主要区别:

    • 在MVC视图中,了解模型(调用getData()等以显示数据)
    • 在MVP(被动视图)中,视图不了解模型。演示者将数据从模型传递到视图
    详情请参阅:

  • Martin Fowler的深入描述:

  • MVC用于java体系结构,如Spring、Struts等。。 MVC代表模型视图和容器

    在Web应用程序中使用此策略非常好

    模型-视图-控制器(MVC)是一种软件架构,[1]目前被认为是一种架构模式,用于软件工程。该模式将域逻辑(用户的应用程序逻辑)与用户界面(输入和表示)隔离开来,允许独立开发、测试和维护每个域(分离关注点)


    使用MVC模式可以分离应用程序的不同方面(输入逻辑、业务逻辑和UI逻辑),同时提供这些元素之间的松散耦合。[2]

    虚线是通知(例如观察者模式),实线是直接知识(例如编译时依赖性)。数据更改通知在虚线上流动。带箭头的实线表示一个组件了解另一个组件,可以直接推送数据。虚线是更松散的耦合,因为发送方正在触发一个事件,但不知道隐藏在事件侦听器接口后面的该事件的接收方的性质(如果您正在执行这些模式的事件驱动版本)

    模式的要点是通过避免所有内容都直接与其他内容交互的意大利面代码来创建秩序。因此,这些图表实际上只是关于什么应该与什么分离的提示。像任何这样的图表一样,如果没有详细的解释,它们是很难理解的,并且它们只是真正表明你应该瞄准什么;某些框架或多或少地支持以“纯方式”做事。组件如何加载和连接在一起不在这些图的范围内;仅当用户输入数据或通过其他视图组件更新模型时发生的情况。因此,实际的类可能具有编译时依赖项和初始化对象的代码,这些对象似乎违反了图表;然而,只要只是“初始化”代码将事物连接在一起,它就可能不是实质性的

    下面是一个演示,它试图用一些不太正式的图表来解释MVP、MVC(或者可能是MVVMP)和MVVM(也称为MVB),这些图表显示了什么编译成什么,以及谁用观察者模式事件侦听器通知谁。它与您的问题相关,因为它设定了模式目标的上下文,这有助于解释问题中的图表:

    这是一篇没有图表的文章,但它使用三种不同的GUI事件驱动桌面模式(可以粗略地描述为MVP、MVVM和MVC/MVP)三次显示相同的简单屏幕。关于M_________________________________________。这篇文章与你的问题相关,因为它遵循了Martin Fowlers对模式的正式描述,这些模式比“M___”名称更清晰、更容易混淆:


    虽然那篇文章没有具体回答您的问题,但它确实比较了您所询问的模式的三种实现,并对它们进行了比较;因此,它很可能有助于阐明模式所做的选择以及图表所要描述的内容。当然,如果您选择一个不同的框架来实现这三种模式,那么示例代码看起来就会不同;但希望这篇文章中的例子也能看到同样的权衡

    请注意,在MVVM中,Microsoft在模型上实现InotifyProperty更改。一些MVVM开发人员总是忘记的事情;-)不完全正确Andrejs,在被动视图中,视图不正确