【问题标题】:Where does JavaScript sit in the MVC pattern of a web application?JavaScript 在 Web 应用程序的 MVC 模式中处于什么位置?
【发布时间】:2011-08-08 00:05:53
【问题描述】:

在构建 Web 应用程序时,我仍然对 JavaScript 代码在 MVC 模式中的位置感到困惑。我以为它是这样工作的。

  • 模型是数据库,模型是 获取数据所需的类 进/出。
  • 控制器将是我编写逻辑的类 即 Java servlet,它接受一个 Ajax 请求然后调用 数据库;
  • View 是 JSP 页面,它是 通过返回到 Ajax 请求 servlet(我的控制器)

因为 JavaScript 代码是在浏览器中编译的,所以我认为它是 View 的一部分,但它处理用户输入,根据这些事件发出服务器请求,然后将数据返回到页面,所以这也构成了一部分控制器?

另外,在 MVC 中引用域模型是什么意思?

【问题讨论】:

    标签: javascript model-view-controller


    【解决方案1】:

    JavaScript 代码是视图的一部分。视图是输出到浏览器的内容,虽然 Javascript 代码不会自动为它提供视觉外观,但它可以用来修改 DOM。

    当您开始谈论 Ajax 时,很容易将 JavaScript 代码视为正常流程中的其他内容,但您应该分解 Ajax 请求的过程,将其视为另一个 HTTP 请求。

    有些人将有一个仅用于 Ajax 请求的控制器,而其他人可能会将参数传递给描述 Ajax 请求的控制器以修改输出。

    无论哪种方式,JavaScript 代码都位于视图中,您可能需要学习一些有关 MVC 设置中 Ajax 的其他设计策略。

    【讨论】:

      【解决方案2】:

      MVC 只是一种模式。 JavaScript 代码本身可以实现这种模式,所以我认为它不适合服务器端框架模式的其他部分。查看Backbone,了解在 JavaScript 代码中使用 MVC 的一个很好的示例。

      您可以根据用于建模服务器端代码的类似概念来建模您的 JavaScript 代码。 JavaScript 代码本身将通过您的服务器端应用程序的视图提供,但除非您只是用 JavaScript 代码(您不是)添加眼睛糖果,否则 JavaScript 代码实际上是它自己的实体,不一定适合您的服务器端 MVC 范例。

      尝试将 JavaScript 代码与任何服务器端分开。只需将其视为“附加组件”,如果在浏览器中禁用它,也不会破坏您的应用程序运行。我只是添加了一些细节以实现更好的交互,等等。如何对 JavaScript 代码进行实际建模取决于您,(但我强烈推荐 Backbone)

      也可以在仅由数据源支持的 javascript 中做一个丰富的前端。在这种情况下,javascript 将再次负责维护模型、视图和控制器。

      域模型通常只是指您的应用程序的业务逻辑。可以说,在您的应用程序中应该实际发生的事情的大脑。它是一种抽象概念,封装了应用程序的所有业务逻辑。

      【讨论】:

      • 你推荐backbone.js而不是其他东西来实现MVC模式有什么特别的原因吗? (PureMVCJavascriptMVC 等)
      • 从未使用过纯 JavaScript MVC,但至少在我最后一次查看时,它对于我所需要的东西来说似乎过于臃肿。主干是一个非常干净、简单的实现,源代码很容易理解,并且文件大小非常小。我也刚刚发现它的继承模式很棒,即使你不使用任何视图/控制器的东西,它也非常适合在 javascript 中直接使用 OO。
      【解决方案3】:

      Nick,我在 MVC 方面的个人经验,与 ZendSpring 一起工作,我认为 JavaScript 代码将被视为 View 的一部分,因为 JavaScript 代码正在帮助 View 并直接与视图交互。 通过 Ajax 发送和接收数据可以视为一个请求。

      【讨论】:

        【解决方案4】:

        如果您使用 JavaScript 来处理 DOM,那么是的,它是视图的一部分。但是您仍然可以在服务器端使用 JavaScript,在这种情况下,它可能是与业务相关的代码的一部分。

        【讨论】:

          【解决方案5】:

          JavaScript 将主要是与 UI 相关的问题;您的视图正在向控制器发出 ajax 请求。控制器没有发出 ajax 请求;模型也不是。出于所有意图和目的,ajax 请求与普通请求没有什么不同。只是浏览器在返回您的响应之前不会挂起。

          JavaScript 也在你的客户端上下文中执行,在你的服务器权限之外,所以它应该进入视图。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-24
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多