假设我正在编写一个博客应用程序:我的Posts
实体应该有一个createddate
、modifieddate
、name
和slug
属性(当我为实体调用 setName() 时会生成 slug)。我想重用这段代码,但我也想按需重用它。例如,我可能有一个Log
想要使用createddate
但不想modifieddate
使用slug
功能的实体。
类继承,无论是通过特征(mixins)还是抽象类,似乎都不足以或至少是不正确的重用此功能的方法,因为它没有通过is-a测试。毕竟,实体有一个createddate,但它本身不是一个 createddate.. 所以我们应该使用组合而不是继承,对吗?但是,observer似乎在这里不起作用,因为虽然我想按需使用此功能,但在不使用Reflection的情况下,Doctrine 对注释和对象属性的使用似乎使水平注入变得困难(而且成本高昂?)。
为了显示一些代码并稍微简化问题:我可以立即将以下定义和功能注入实体而不破坏DRY或良好的 OOP(正确使用组合/继承)实践吗?
/**
* @var DateTime $createddate
*
* @ORM\Column(type="datetime")
*/
private $createddate;
/**
* @ORM\PrePersist
*/
public function createddatePrePersist() {
$this->createddate = new \DateTime('now');
}