【问题标题】:Pros and cons of a global base object for all objects in Doctrine2Doctrine2 中所有对象的全局基础对象的优缺点
【发布时间】:2014-12-30 01:01:10
【问题描述】:

对我的 Doctrine2 模型中的所有实体使用全局基础实体的优缺点是什么?

我正在考虑让我的所有域实体扩展单个通用基础实体,以便我可以将关联的目标实体指定为基础实体类,从而允许该关联保持我域中的任何实体。

我的关联仍将尽可能具体:Order 实体将包含 Product 对象,而不是 Base 对象。但更多类似于“元”的功能,如状态日志项、授权规范等,可以通过定义与 BaseEntity 关联的 LogItems 和 AuthorizationRules 来非常通用地指定,而不是与特定项关联。

我在任何地方都没有看到这种方法,但是让所有类都从基础 Object 实体(“Java 风格”)扩展出来似乎有一些用处或威力。但也许我不必要地把事情复杂化了。

Doctrine2 中的基础实体是个好主意吗?

【问题讨论】:

  • 你试过了吗?我认为它不会像你期望的那样工作。
  • 您可以考虑使用全局接口而不是类。关于您的报价having all classes extend off a base Object entity ('Java-style'),这根本不是真的,是的,所有类都扩展了 Object,但是在模型结构中,并非所有模型都扩展了“全局类”。你需要重新分析你的建模
  • Cerad,还没试过。会的!
  • Manix,我知道这很不寻常,问题是:为什么?有什么好处和坏处?

标签: php design-patterns orm doctrine-orm doctrine


【解决方案1】:

你已经在这里描述了这一切:

http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

您可以从 OOP 的角度进行继承(php)并将其映射到数据库(您可以让人员和员工也是人(或人))但您不能让数据库理解继承(已经完成在数据库抽象层(学说))。

因此,您可能想要关联的每个类都必须是实体,这意味着人和员工都必须是实体。如果您将其作为单表继承进行,则可以将实体与“人员”相关联,然后它也将包括员工。

http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html#single-table-inheritance http://martinfowler.com/eaaCatalog/singleTableInheritance.html

【讨论】:

  • 我知道子类是可能的以及它们是如何工作的,我的问题是关于让 all 域类成为一个基类的子类,不仅仅是在 php 领域,而是在 orm 模型中也是如此,通过将基类列为关联的目标实体来允许与“未指定”目标类的关联。
猜你喜欢
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2016-08-10
  • 2016-05-09
相关资源
最近更新 更多