【问题标题】:Questions about the MVC architecture关于 MVC 架构的问题
【发布时间】:2010-06-06 19:43:47
【问题描述】:

我开始编写一个相当复杂的 Web 应用程序,结果变得一团糟。 所以我想我会尝试以更好的方式组织它。 MVC 似乎很合适。 我以前从未使用过 MVC,并且研究它我试图巩固对它的更好理解(我的问题显然反映了我认为到目前为止我学到的东西)。 我的问题有点面向 JavaScript:

  1. 什么对象应该发出“AJAX”请求?控制器还是模型? (分离——模型应该只存储/操作数据,它应该不关心/不知道数据来自哪里,还是应该是获取数据的那个?)

  2. 模型应该调用视图函数,为它们提供数据作为参数,还是视图应该在自身内部查询(引用)模型? (记住分离原则,“视图不应该关心/知道它从哪里获取数据”——对吗?)

  3. 一般来说,视图是否应该“知道”模型的存在,反之亦然?控制器是唯一将它们粘合在一起的东西还是根本不正确? (我真的怀疑这种说法是否正确)

很有可能我想将它移植到桌面/移动应用程序中,所以我想以一种能够让我完成该任务的方式分离组件,替换当前的数据源、HTTP 请求,具有数据库访问权限,并替换视图。

也许我所询问的每种方法仍然是“有效的”MVC,这取决于我的选择。我知道没有什么是一成不变的,我只是想在脑海中有一个(更好的)总体思路。

【问题讨论】:

    标签: model-view-controller architecture


    【解决方案1】:
    1. 假设您的意思是真正的 Ajax(即异步 Javascript 调用),我认为这确实是视图的责任。 Javascript 是客户端,而您的控制器和模型是服务器端。
    2. 模型和视图不应有任何交互。控制器是信息网关,是控制应用流程的粘合剂。
    3. 如上所述,视图不应与模型交互。正如您所说,控制器是中间人。在大多数框架中,都有一些方法可以使该管道短路,但应该避免它们。

    【讨论】:

      【解决方案2】:

      1 - 视图发出AJAX 请求,它已由控制器处理。控制器知道要请求什么数据,何时以及如何为视图打包数据,但不知道任何底层存储机制(例如,SQL、XML、NoSQL...);由模型抽象出来。
      2 - 两者都没有。视图和模型不应该相互认识。
      3 - 第一个不同意,第二个同意。

      【讨论】:

      • AJAX请求从服务器接收到的数据需要保存在Model中。视图为什么以及如何发出 AJAX 请求?这对我来说没有任何意义。也许我应该提到它,但是对 AJAX 请求的响应不包含 HTML,而是需要进入模型的 JSON 数据。
      • @ah123: AJAX 请求由客户端(浏览器)发出,通常为GETsPOSTs。这些由控制器接收,控制器可以持久化数据,生成新的HTMLJSON等,然后将结果返回给客户端。最大的优势是允许客户端与服务器发送/接收数据,而无需刷新整个页面,这样带宽效率更高,并提供更多桌面应用程序的感觉。
      • 是的,这不是我的第一个 Web 应用程序,我熟悉 HTTP 协议,您提供的原因是我使用“AJAX”的原因。我只有一页加载。所以基本上,Model 负责所谓的“底层存储机制”,包括这种情况下的 AJAX 请求,而 View 通过 CONTROLLER 从 Model 中获取数据。
      • @ah123:模型处理AJAX请求;控制器会,如果它需要与模型交互,它会,但这并不总是必要的。
      【解决方案3】:

      我自己也走上了以下道路:

      1. 模型中所有与数据相关的处理,包括。 AJAX 请求和处理程序
      2. 控制器处理连接到模型和视图的侦听器
      3. 我很喜欢这种控制器监听和互连的概念。我确实认为这让事情变得简单了很多

      查看Model-View-Controller in jQuery 教程了解此方法。它让我的生活变得更轻松,并在很大程度上改进了代码。易于重构和重用。

      【讨论】:

        猜你喜欢
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 2015-01-13
        • 2011-05-10
        • 2020-05-06
        • 1970-01-01
        相关资源
        最近更新 更多