У меня есть дерево Zone
объектов:DDD: это нормально, чтобы впрыснуть службу в Entity
class Zone {
protected $parent;
public function __construct(Zone $parent) {
$this->parent = $parent;
}
}
Там не являются неchildren
ни descendants
собственности в Зоне, потому что я хочу, чтобы избежать боль управления этими отношениями в модели домена.
Вместо этого служба домена поддерживает таблицу закрытия в базе данных, чтобы отобразить зону всем ее потомкам на любом уровне.
Теперь у меня есть User
, который может быть назначен один или несколько зон:
class User {
protected $zones;
public function assignZone(Zone $zone) {
$this->zones[] = $zone;
}
}
Моя проблема заключается в том, что до назначения нового Зону Пользователю, я хотел бы проверить, что эта зона уже не назначается, явно или неявно через одного из его потомков.
Поэтому я хочу, чтобы мой контроллер скоротечно впрыскивать службы в этот метод, чтобы выполнить необходимые проверки:
class User {
protected $zones;
public function assignZone(Zone $newZone, ZoneService $zoneService) {
foreach ($this->zones as $zone) {
if ($service->zoneHasDescendant($zone, $newZone)) {
throw new Exception('The user is already assigned this zone');
}
}
$this->zones[] = $zone;
}
}
Это хорошая практика, или, если нет, то это правильная альтернатива?
, связанный: http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-object/4836790#4836790 –