Учения 2 сущности: должны ли они содержать логику? - PullRequest
5 голосов
/ 01 мая 2011

Сайт доктрины недоступен, поэтому я ищу информацию здесь:

Что должно содержать сущности Доктрины 2:

  • только свойства и геттеры и сеттеры
  • свойства, методы получения / установки и логика домена

Спасибо

Ответы [ 2 ]

10 голосов
/ 01 мая 2011

Некоторая доменная логика хороша, если она применяется к самой сущности.Например, следующие вещи хороши:

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 или Repositories и т. д.).

Мое правило заключается в том, чтобы почти всегда избегать наличия у моих сущностей каких-либо зависимостей (кроме связанных классов сущностей).Если вдруг мне понадобится что-то сложное, я знаю, что пришло время перенести логику из сущности в класс обслуживания.

2 голосов
/ 02 мая 2011

Сущность должна содержать бизнес-логику.То есть логика должна относиться только к самому объекту и связанным объектам.Как уже сказал @timdev, субъекты должны быть на 100% постоянными.Никогда не следует использовать EntityManager, Repositories или Services;только другие объекты.

Возможно, вы захотите посмотреть аналогичный вопрос Я уже задавал.

...