【问题标题】:Where does user input come from in a MVC architecture?用户输入在 MVC 架构中来自哪里?
【发布时间】:2009-07-29 14:34:18
【问题描述】:

我想知道控制器从哪里获取用户输入(以提供模型)。因为输入媒体与用户密切相关,视图不应该知道获取用户数据的具体方式吗?但是我怎样才能将控制器与视图分开呢?是否有可能按照它们的目的使两者完全独立?

示例: 当我有一个使用 curses 库作为视图的应用程序时,这意味着它只能通过终端访问。在控制器中使用 curses 方法读取用户数据会破坏封装,但在视图上调用方法与显示模型无关。

【问题讨论】:

    标签: model-view-controller user-input


    【解决方案1】:

    在 MVC 中,控制器从视图中获取其用户输入。

    【讨论】:

      【解决方案2】:

      考虑让视图和控制器通过Observer pattern 进行通信。 Controller 将自己注册为 View 的 Observer。当用户将数据输入视图并按下 Enter 时,视图会解释数据并通知其观察者有可用的数据。然后,Controller 可以通过公共方法从 View 中获取数据。

      【讨论】:

        【解决方案3】:

        我认为视图实际上与输入数据没有太大关系。如果您看到用户直接与控制器通信,我发现 MVC 更容易可视化。控制器从用户接收数据并将视图发回。在许多系统中,视图引擎有一些有限的自我更新方式(即文本输入显示在发送到控制器之前输入的内容)。但是对于任何 MVC 类型的架构,只要它们都能够处理相同的数据,您就可以将任何视图替换为任何其他视图。

        例如。可以在任何支持输入字符串的系统上输入用户名。控制器接受字符串,因此可以在 Web 应用程序、终端应用程序或 GUI 应用程序中使用。

        【讨论】:

        • 如果,例如,View1 有 Button1,而 View2 没有呢?控制器应该如何从两个视图中获取其输入(单击 Button1)?
        【解决方案4】:

        我认为视图应该在控制器上有一个回调来发送用户输入。在 Web 架构中,回调是通过将用户输入通过 http 请求发送回服务器的能力来提供的。

        在你的情况下,你的 ncurse 前端可能应该有某种回调方法到控制器组件以发回用户输入。

        【讨论】:

          【解决方案5】:

          嗯,

          我会尽量为您提供更具体的信息。为您可以看到的 ppl 提供模糊/抽象的答案,不掌握主题,没有帮助。

          MVC -> 模型视图控制器

          MVC的实现有很多,我不知道你的情况,但我给你一个。

          最常见的 MVC 实现是这样的..

          视图 控制器 模型

          在网络场景中..

          视图将是您的 HTML 页面,数据输入将发生在表单中。

          <form action=/home/createuser method=post>
          ...code goes here...
          </form>
          

          Home 将是您的控制器(一个名为 home 的类),并且 createuser 是 home 中的一个方法。

          public class Home extends Controller {
          
             public void createUser(Userform f){
                ...create user...
             }
          }
          

          此表单会将数据作为参数提交到方法中。 Createuser 会对其进行处理以与模型对话,然后在这种情况下持久化数据。

          【讨论】:

            猜你喜欢
            • 2020-03-27
            • 2021-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-21
            • 2010-11-03
            • 2013-10-19
            • 2011-06-21
            相关资源
            最近更新 更多