【问题标题】:MVC design pattern - who loads view initiallyMVC 设计模式 - 最初加载视图的人
【发布时间】:2011-07-15 14:22:57
【问题描述】:

这个查询是关于一般的 MVC 设计模式,而不是 ASP.net MVC 框架

我了解 MVC(桌面应用程序):

  1. 用户点击了视图中的内容
  2. 这被传递给控制器​​来管理
  3. 控制器对模型进行了一些更改
  4. 模型在视图上调用具有刷新 UI 逻辑的方法

围绕这些问题:

Q1) 控制器也可以修改 View 或 Model 只更新 View 吗?

Q2) 首次加载屏幕时,没有模型更改。那么,谁从模型中获取数据并填充视图? View 直接调用 Model 并自行填充,或者控制器获取数据并传递给 View 方法,或者在 Model 上引发一些虚拟事件来更新 View?

【问题讨论】:

    标签: asp.net-mvc model-view-controller design-patterns


    【解决方案1】:

    来自model-view-controller

    1. 用户以某种方式与用户界面交互。 (例如,按下鼠标按钮)。
    2. 控制器通常通过注册的处理程序或回调处理来自用户界面的输入事件,并将事件转换为模型可以理解的适当用户操作。
    3. 控制器将用户操作通知模型,可能导致模型状态发生变化。 (例如,控制器更新用户的购物车。)
    4. 视图查询模型以生成适当的用户界面(例如,视图列出购物车的内容)。视图从模型中获取自己的数据。在一些实现中,控制器可以向视图发出一般指令以呈现其自身。在其他情况下,需要屏幕更新的状态变化模型(观察者)会自动通知视图。
    5. 用户界面等待进一步的用户交互,这将重新启动控制流循环。

    【讨论】:

    • 实际上我提出这个问题的来源是第 4 点。仅在维基百科定义中。如果我按照这个说法,View 可以直接调用模型方法来填充自己。但这不会让模型变得不那么精简吗?
    • @enableDeepak:我真的不明白你对模型变得不那么精简的问题,但无论如何请检查这张图片java.sun.com/blueprints/patterns/images/… 它比关于如何实际实现 MVC 的文字解释得更好。
    • 如图所示,View可以直接向Model请求数据(绕过控制器)。这是否意味着在 View.cs 中我可以编写类似 Model.GetData() 的东西?这实际上是我想知道的。如果这是正确的,那么我的线程问题实际上会得到回答,因为 View 将直接调用 Model 来获取初始值。
    • @enableDeepak: 是的,您可以在视图文件中调用 Model.GetData(),但是您不应该从视图中调用 Model.ChangeData(),因为这是控制器。
    • 还有一个问题...控制器也可以直接调用视图方法()吗?如果有添加数据的视图,可以说验证将在控制器级别执行。如果验证失败,可以直接调用view的方法(比如ShowError)?
    【解决方案2】:

    在网络环境中,您总是有来自网络浏览器的请求。所以逻辑按上面描述的那样工作,但它周围有一个包装器:

    1. 浏览器向服务器发送请求等待回复
    2. 上述四个步骤。在这种情况下,UI 也是服务器中的一个内部模型。
    3. 渲染引擎从内部 UI 模型创建一个新的 UI(一个新的 HTML 页面)
    4. 服务器将新的 HTML 文档发送回浏览器
    5. 浏览器呈现结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多