问题 Symfony2中的模型和其他MVC框架?


我试图了解模型如何在适当的MVC中工作。

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

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

我在掌握Symfony2的一些功能时遇到了问题,模型在Symfony2 MVC中的适用范围。

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

所以 我的问题是

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

所以我的问题是Symfony2中的模型在哪里?由于Model是一个由Domain Objects和Data Mappers组成的层,我可以假设Entities是Domain Objects,而Doctrine是Data Mapper,这是正确的吗?

Symfony2服务在哪里适用?


5625
2017-10-29 11:52


起源



答案:


  1. 与其他框架一样,Symfony2没有MVC的传统“模型”部分。甚至来自ORM / ODM Doctrine的实体/文档也不是框架本身的一部分,Symfony2也不依赖它。

    正如Fabien(Symfony框架的创建者)写的那样 博客

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

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

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

  2. Symfony2服务与Web服务完全不同。 Symfony2服务旨在用于您的系统,而Web服务旨在通过REST api从一台机器到另一台机器使用。虽然,我想你可以创建RESTful api作为服务的一部分。


11
2017-10-29 12:43



我一直在读它。看起来很棒的框架。我喜欢它的是它拥有的PHP所拥有的。你不能说它基于RAILS,你不能说它基于.NET。它基于在基于unix的系统上使用php的最佳实践。如果有任何事情发生在它之后,它将基于symfony。 - numerical25
Fabien:“Symfony2是一个HTTP框架;它是一个请求/响应框架。这是一个大问题” - Dung


答案:


  1. 与其他框架一样,Symfony2没有MVC的传统“模型”部分。甚至来自ORM / ODM Doctrine的实体/文档也不是框架本身的一部分,Symfony2也不依赖它。

    正如Fabien(Symfony框架的创建者)写的那样 博客

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

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

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

  2. Symfony2服务与Web服务完全不同。 Symfony2服务旨在用于您的系统,而Web服务旨在通过REST api从一台机器到另一台机器使用。虽然,我想你可以创建RESTful api作为服务的一部分。


11
2017-10-29 12:43



我一直在读它。看起来很棒的框架。我喜欢它的是它拥有的PHP所拥有的。你不能说它基于RAILS,你不能说它基于.NET。它基于在基于unix的系统上使用php的最佳实践。如果有任何事情发生在它之后,它将基于symfony。 - numerical25
Fabien:“Symfony2是一个HTTP框架;它是一个请求/响应框架。这是一个大问题” - Dung


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

我完全不同意这个说法。如果你以正确的方式看待它,MVC绝对适合网络。

1)Controller接收HTTP请求。

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

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

4)Controller从View获取结果并将其作为HTTP响应发送回客户端。

仅仅因为MVC是在网络存在之前几年被发明用于桌面应用程序,因此与网络无关,这是由于人们无法看到木材的树木而造成的错误,如果不注意不相关的细节,谁就无法看到大图。 MVC中的每个组件都有一组不同的职责,只要你创建了三个组件,每个组件都履行其中一个职责 - 物理实现是无关紧要的 - 那么无论你喜欢与否,你都拥有MVC。


4
2017-09-04 09:48





我不知道Symfony,但我已经使用其他MVC框架(grails,codeigniter)。

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

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

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


-1
2017-10-29 12:17



问题是“Symfony2中的模型在哪里......”这个人因为熟悉MVC而寻找最佳实践, - SMSM