gpt4 book ai didi

symfony2 - 扩展基本实体类还是保持实体不相关?

转载 作者:行者123 更新时间:2023-12-04 06:38:28 25 4
gpt4 key购买 nike

我有一个 symfony2 项目,其中包括六个主要实体类型。我正在使用 Doctrine。

这些实体具有许多相同的字段,例如 creatorId、Created、Updated、Status 和 Title。目前,每个实体都是单独定义的 - 所以当然有很多基本代码(以及 db 字段)的重复。

我在学习 symfony2 的同时也在学习 OOP,所以我在这里摸索,但我的问题是:

将每个实体保留为一个独立的类是否被认为是最佳实践?或者最好为共享属性创建一个新的基类,然后让其他实体扩展基实体?

奖金问题:

如果实际上构建从父类继承的实体更好,我可以模糊地想象两个选项:

1)父类是一个完全映射的Doctrine实体,在数据库中有自己的表,我们将称之为,哦,让我们称之为“节点”。因此,调用子实体将始终涉及 Nodes 表和 Child 内容类型实体表之间的附加 Join。

2)父类是一个 - 嗯 - 抽象类(?),定义其他实体的共享属性,但没有实际的数据库存在。每个子实体分别实现共享属性,因此数据库结构与我当前的设置保持相同,但在定义实体时(大概)减少了代码重复。

我主要是在寻找关于整个问题的建议 - 扩展基本实体的子实体,或者只是单独的实体。虽然欢迎提示,但不期望任何人解释最佳实现。

最佳答案

我会创建一个抽象的基本实体类,并让您的其他实体扩展它。例如:

abstract class AbstractEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
*/
protected $id;

/**
* @var \datetime $created
*
* @ORM\Column(type="datetime")
*/
private $created;

/**
* @var \datetime $updated
*
* @ORM\Column(type="datetime")
*/
private $updated;

...

}

然后您的每个实体都可以扩展它:
class SomeEntity extends AbstractEntity
{

/**
* @var string
*
* @ORM\Column(name="some_name", type="string", length=255)
*/
protected $something
}

选项 2 是正确的 - 数据库中的抽象类不会有任何具体的表。

如果需要,您仍然可以使用其他抽象类来扩展基类。例如,一个 AbstractVehicle 实体将扩展基础实体。例如,如果您希望在同一个表(例如“车辆”)中包含 AbstractVehicle 的所有子实体(例如 Car、Van 等),您可以使用类似鉴别器映射的东西。 This article on Inheritence Mapping可能是有用的阅读。

关于symfony2 - 扩展基本实体类还是保持实体不相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21155419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com