【问题标题】:Model View Presenter (MVP) What is the model?Model View Presenter (MVP) 什么是模型?
【发布时间】:2009-12-15 13:44:31
【问题描述】:

我似乎无法理解 MVP 中的模型到底是什么。

如果我有一个分层架构 PRESENTATION / APPLICATION / DOMAIN / INFRASTRUCTURE,那么 MODEL 到底是什么?

  1. 通过以下方式访问的 DOMAIN 对象 低层?
  2. 在 映射到的 PRESENTATION 层 UI 并使用从 下层?

如果有人能澄清我对什么是模型的理解,将不胜感激。

【问题讨论】:

    标签: model-view-controller


    【解决方案1】:

    模型通常是一组类/类型/组件,代表您的应用程序在其中运行的核心域(业务或其他)。这些是执行所需关键逻辑的类,通常以业务规则的形式,并且还消费/操作数据。

    在您的分层示例中,模型主要位于域层中,但也可能位于应用层中。

    我认为您很难理解它,因为您尝试将两种独立的架构模式或查看应用程序的方式结合起来,即 n 层/n 层与 MVP。

    使用某种模型/视图方法同时在应用程序中应用分层是完全合理的(并且非常普遍)。

    也许您应该从一个开始,然后在您更熟悉两者时将它们叠加起来。

    【讨论】:

    • 你是说这两种架构模式是截然不同的,不应该结合起来?
    • 模型都是关于数据的。它们包含的任何逻辑都与数据及其完整性有关。它们不应包含视图或控制器逻辑(如何显示模型内容或应将哪些模型呈现给视图以响应用户输入)。
    • @David,不,老实说,我误读了更通用的 MVC 的 MVP。据我所知,MVP 就是关于你的 UI 的。实际上,我发现在这些不同的模式中重用模型很烦人。对于最广泛认可的模型定义,您应该查看 Martin Fowler 的企业应用程序架构模式。
    • @Will,在 MVP 中似乎是正确的,绝对不是更广泛意义上的模型视图控制器。但这正是大卫问这个问题的原因。如今,Eveyone 和他们的狗已经提出了 Model 的定义。我通常会看 Martin Fowlers 的书(见之前的评论)。
    【解决方案2】:

    模型是数据。这可能只是 DataSets 中数据库中的数据,也可能是一个完整的领域模型,其中包含代表您的业务领域的对象。

    视图是用户界面,无论是网页、Windows 应用程序还是移动设备应用程序。

    主持人是两者之间的粘合剂,也是整套服装的大脑。视图发起的动作发生在演示者中。通常在 WinForms 应用程序中,例如,我的 View 中的 Button.Click 事件只是调用 Presenter 上的一个方法,然后它会采取任何必要的操作(它可能只是在 View 中做一些事情)。

    演示者持有对视图(通过界面)和模型的引用。视图有一个对演示者的引用(通常我强烈键入它,但它也可以是一个接口)。模型不知道演示者或视图。

    【讨论】:

    • 演示者是否会根据模型状态的某些逻辑来确定按钮是否启用/禁用
    • 一般来说,是的。在视图中有两个相互依赖的部分与演示者或模型无关的情况下,我不会在视图中做所有事情。我认为最好的经验法则是正在完成的事情是否需要在 any UI 中完成(在这种情况下应该由演示者完成)或者它是否特定于特定类型您正在使用的 UI(例如,您在 WinForms 中执行但在 WPF 中不执行的操作)。
    【解决方案3】:

    无论您遵循什么架构指南,M 始终是相同的东西。模型是特定于您的域的部分。这才是你的应用程序真正想要做的部分。该模型应该代表您的业务领域。这适用于 MVP、MVC、MVVM 等。

    如果您正在创建一个库存系统,那么您的模型中很可能会出现一个 Inventory 类,一个 Product 可能会在那里,一个 Order,您就会明白了。这些是构成你的域逻辑的东西。

    【讨论】:

      【解决方案4】:

      在任何 Model-View-* 架构中,模型是描述应用程序中数据的内容(如果它们符合需要,则传递给视图进行渲染)。

      如果您的应用程序已经有域对象,那么您很可能可以将它们用于您的模型。

      【讨论】:

      • 贾斯汀如果他们符合需要,你是什么意思?
      • “满足需求”是指如果它们表达了您需要在视图中呈现的数据。如果没有,这个问题可以很容易地通过使用视图模型来解决……它们几乎是专门用于表达要在视图中呈现的数据的模型。
      • 谁将负责创建这些视图模型?视图模型是否与我所看到的屏幕 DTO 相同?
      • 我会假设视图模型在功能上等同于屏幕 DTO。至于谁应该负责创建它们……这完全取决于您的团队结构。我想说创建视图的人应该负责创建视图模型,因为他们将使用/使用它。
      • 抱歉我的最后评论不清楚。我所说的负责任是指什么是负责任的。将视图模型放在一起是演示者的责任吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多