Doctrine 2实体:它们应该包含逻辑吗?

时间:2011-05-01 18:11:35

标签: php doctrine-orm entity

该学说网站已关闭,所以我在这里寻找信息:

什么应该包含Doctrine 2实体:

  • 仅限属性和getter以及setter
  • 属性,getters / setter和域逻辑

由于

2 个答案:

答案 0 :(得分:10)

如果一些域逻辑适用于实体本身,那么它就很好。例如,以下内容很好:

class myEntity {
  // ...

  /**
   * @OneToMany(targetEntity="LineItem")
   */ 
  protected $items;

  public function equals($otherEntity){
     //compare $this->lineItems and $otherEntity->lineItems, and return true if
     //they are identical      
  }

  /**
   * More business logic internal to an entity.
   */
  public function subtotal(){
    $total = 0;
    foreach($this->items as $i) $total += $i;
    return $i;
  }
}

想要的东西是那个实体(或它拥有的实体)之外的副作用,数据持久性(实体永远不应该知道EntityManager或存储库,等)。

我的经验法则是几乎总是避免让我的实体有任何依赖关系(除了相关的实体类)。如果突然间我需要复杂的东西,我知道是时候将逻辑从实体迁移到服务类了。

答案 1 :(得分:2)

实体应该包含业务逻辑。也就是说,逻辑应仅与实体本身和相关实体相关。正如@timdev所说,实体应该是100%持久性不可知的。绝不应该使用EntityManager,存储库或服务;只有其他实体。

您可能希望查看我已经问过的similar question