Я задал похожий вопрос некоторое время назад: Используя шаблон сопоставления данных, должны ли сущности (доменные объекты) знать о преобразователе? Тем не менее, он был общим и Мне действительно интересноо том, как выполнить несколько вещей с помощью Doctrine2, в частности .
Вот простой пример модели: каждая Thing
может иметь Vote
из User
, User
может разыграть болееодин Vote
, но учитывается только последний Vote
.Поскольку другие данные (Msssage
и т. Д.) Связаны с Vote
, когда помещается вторая Vote
, исходная Vote
не может быть просто обновлена, ее необходимо заменить.
В настоящее время Thing
имеет эту функцию:
public function addVote($vote)
{
$vote->entity = $this;
}
И Vote
заботится о настройке отношений:
public function setThing(Model_Thing $thing)
{
$this->thing = $thing;
$thing->votes[] = $this;
}
Мне кажется, что обеспечение только User
имеетпоследний Vote
считается тем, что Thing
должен обеспечить, а не каким-то служебным слоем .
Таким образом, чтобы сохранить это в модели, новая функция Thing
:
public function addVote($vote)
{
foreach($this->votes as $v){
if($v->user === $vote->user){
//remove vote
}
}
$vote->entity = $this;
}
Итак, как мне удалить Vote
из модели предметной области? Должен ли я расслабиться Vote::setThing()
, чтобы принять NULL
?Должен ли я задействовать какой-либо уровень обслуживания, который Thing
может использовать для удаления голоса?Как только голоса начнут накапливаться, это foreach
будет медленным - следует ли использовать служебный слой, чтобы Thing
мог искать Vote
, не загружая всю коллекцию?
I 'я определенно склоняюсь к использованию легкого сервисного слоя;Однако, Есть ли лучший способ справиться с этим типом вещей с помощью Doctrine2, или я иду в правильном направлении?