【问题标题】:Symfony2 and the MVC concept of view modelSymfony2和视图模型的MVC概念
【发布时间】:2012-05-16 17:57:42
【问题描述】:

我认为 Symfony2 缺少 ViewModel 的概念(如 ASP.NET MVC 框架),即与视图关联的模型。 Symfony2(作为文档)通常将 array 分配给视图。

视图模型可以是一个 PHP 类,但它与表单模型不同,有时它与域实体相同。在处理要显示的大量信息时,它有时很有用。

无论如何,关于视图模型在 Symfony2 中的位置是否有任何约定?有具体的文件夹吗?现在我有:

Symfony2/src/MyCompany/MyBundle/Form/Model

保存与表单关联的模型。并且:

Symfony2/src/MyCompany/MyBundle/Entity

用于域实体(绑定到数据库表)。

非常感谢您的建议。 Symfony2/src/MyCompany/MyBundle/Model呢?

【问题讨论】:

标签: model-view-controller design-patterns symfony naming-conventions


【解决方案1】:

在 Symfony2 中,没有 ViewModel 这样的概念。您直接传入模板实体或模型。不过,您可以构建自己的 ViewModel。

实体不是模型。正如您所说,它们是原则管理对象或域实体。如果您想拥有业务模型,请将它们放在 MyBundle/Model 中,就像许多其他捆绑包一样(例如,FOSUserBundle)。

【讨论】:

  • 听起来不错。但在许多情况下,我仍然将实体视为模型。无论如何,谢谢,我会像 fosuserbundle 一样。
  • 如果您在谈论域模型,那么是的,实体是域模型中的一个项目。
  • @wilmoore 是的,除非您想为您的实体支持两种数据库类型。您可以添加 Doctrine ODM,其中不存在实体,仅存在文档。如果您将模型用于域模型,您需要做的就是更改模型中实现 ORM 相关内容的底层对象。
  • 这只是 Doctrine 的一个糟糕的术语。在他们的 ODM 文档中,他们都在谈论“持久模型”;然而,在坚实的架构中,“模型”实际上是为您的业务建模的事物的集合。它们指的是“持久模型”,但更准确的术语是“持久实体”。此处的示例:docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/…,谈论“用户”,并且鉴于用户是唯一标识的,无论您在哪里坚持,它都是一个实体。
  • @wilmoore 不,术语很好,但术语很重。 “持久性模型”是一组映射到数据库的对象。在 Doctrine ORM 中,它们也称为实体,在 ODM 中 - 文档。“域模型”是映射到业务需求的事物的集合。它们是独立的概念,但可以在同一个对象中实现。
【解决方案2】:

你将ViewModel放在哪里并不重要...只要你的命名空间反映了它的位置。

我会将它放在 src/MyCompany/MyBundle/View/Model 中,然后您的命名空间将是 MyCompany\MyBundle\View\Model

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2013-01-19
    • 2021-06-14
    • 2011-03-15
    • 2016-03-15
    相关资源
    最近更新 更多