我有一个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这样的东西.关于继承映射的这篇文章可能是有用的阅读.
归档时间: |
|
查看次数: |
4572 次 |
最近记录: |