【问题标题】:Models in Symfony2, and other MVC frameworks?Symfony2 和其他 MVC 框架中的模型?
【发布时间】:2012-10-18 17:40:38
【问题描述】:

我试图了解模型在正确的 MVC 中是如何工作的。

据我所知,MVC 中的模型是应用程序逻辑发生的地方,模型是 MVC 的肉或骨干。视图只是呈现,而控制器是“粘合剂”,它要求模型执行一些操作、返回一些数据,并将该信息传递给呈现给用户的视图。

现在,我正在探索各种不同的 MVC 框架,并想了解如何在 MVC 中使用模型。就模型而言,Symfony 2 是一个有趣的框架,因为没有模型 :)

我无法掌握 Symfony2 的一些特性,以及模型在 Symfony2 MVC 中的位置。

根据定义,模型是领域逻辑和数据库操作所在。

所以我的问题是

  1. 在 Symfony2 中,我们有实体和服务,这两个模型是 Symfony 中的吗?
  2. Symfony2 服务和 Web 服务有什么区别?

所以我的问题是 Symfony2 中的模型在哪里?既然 Model 是一个层,由 Domain Objects 和 Data Mapper 组成,那么我可以假设 Entities 是 Domain Objects,而 Doctrine 是 Data Mapper,对吗?

Symfony2 服务在哪里适合?

【问题讨论】:

    标签: php oop model-view-controller symfony model


    【解决方案1】:
    1. Symfony2 不像其他框架那样具有 MVC 的传统“模型”部分。甚至来自 ORM/ODM Doctrine 的实体/文档也不是框架本身的一部分,Symfony2 也不依赖它。

      正如 Fabien(Symfony 框架的创建者)在他的 blog 上所写,

      “您可以手动创建模型或使用任何其他工具, 就像一个 ORM”...“我不喜欢 MVC,因为这不是 Web 的工作方式。 Symfony2 是一个 HTTP 框架;它是一个请求/响应框架。”

      仅仅阅读对我来说很难理解,但是当我真正开始在 Symfony2 中编程时,我明白了他的意思。

      另一方面,Symfony2 中的服务只是一个执行全局任务的对象。路由器、学说、记录器、邮件程序是 Symfony2 预装的众多服务中的一部分。您可以从代码的任何部分访问服务。

    2. Symfony2 服务与 Web 服务完全不同。 Symfony2 服务旨在在您的系统中使用,而 Web 服务旨在通过 REST api 在机器之间使用。不过,我猜您可以创建 RESTful api 作为您服务的一部分。

    【讨论】:

    • 我一直在阅读它。看起来很神奇的框架。我喜欢它的是它由 PHP 拥有。你不能说它基于 RAILS,你不能说它基于 .NET。它基于在基于 Unix 的系统上使用 php 的最佳实践。如果它之后有任何东西,那么它将基于 symfony。
    • Fabien:“Symfony2 是一个 HTTP 框架;它是一个请求/响应框架。这很重要”
    【解决方案2】:

    “我不喜欢 MVC,因为这不是 Web 的工作方式。Symfony2 是一个 HTTP 框架;它是一个请求/响应框架。”

    我完全不同意这种说法。如果您以正确的方式看待 MVC,它绝对适合 Web。

    1) 控制器接收到 HTTP 请求。

    2) 控制器实例化模型(或多个模型)并激活模型上的相关方法,每个方法返回一个通常是数据数组的结果。

    3) 当模型完成后,控制器实例化视图,插入模型中的数据,然后激活将数据转换为 HTML 的方法。

    4) 控制器从视图中获取结果并将其作为 HTTP 响应发送回客户端。

    仅仅因为 MVC 是在 Web 存在多年前为桌面应用程序发明的,因此与 Web 无关,这是一个只见树木不见森林的人所犯的错误,他们如果不关注不相关的细节就无法看到全局。 MVC 中的每个组件都有一组不同的职责,并且如果您创建三个组件,每个组件都履行其中一个职责(与物理实现无关),那么无论您喜欢与否,您都拥有 MVC。

    【讨论】:

      【解决方案3】:

      我不了解 Symfony,但我已经在使用其他 MVC 框架(grails、codeigniter)。

      模型(实体)表示数据,可以直接在模型中定义一些稍后用于验证的限制。例如,如果需要,您可以为每个属性定义其长度、模式、...

      服务可能更依赖于 symfony。与 Grails 相比,服务是您放置业务代码的组件。在 Java EE 中,它是 Bean。请注意,服务可以成为 Web 服务,但不是强制性的。控制器也可以调用服务,以便在渲染视图之前进行一些计算。

      希望我的回答能有所帮助。

      【讨论】:

      • 问题“Symfony2 中的模型在哪里......”这个人在寻找最佳实践,因为他熟悉 MVC,
      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2011-03-10
      • 2014-04-05
      • 2010-09-09
      相关资源
      最近更新 更多