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

ex *_*ler 8 symfony

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

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

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

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

奖金问题:

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

1)父类是一个完全映射的Doctrine实体,在数据库中有自己的表,我们将调用它,哦,我们称之为"节点".因此,调用子实体将始终涉及节点表和子内容类型实体表之间的额外连接.

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

我主要是在寻找有关整体问题的建议 - 扩展基础实体的子实体,或者只是单独的实体.虽然欢迎提示,但不要指望任何人解释最佳实施.

red*_*m13 11

我将创建一个抽象的基本实体类,让你的其他实体扩展它.例如:

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;

...

}
Run Code Online (Sandbox Code Playgroud)

然后你的每个实体都可以扩展这个:

class SomeEntity extends AbstractEntity
{

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

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

如果需要,您仍然可以使用扩展基类的其他抽象类.例如,AbstractVehicle实体将扩展基础实体.例如,如果你想在同一个表格中使用AbstractVehicle的所有子实体(例如Car,Van等)(例如'vehicle'),你可以使用像Discriminator Map这样的东西.关于继承映射的这篇文章可能是有用的阅读.