Код: Выделить всё
class Client implements StatefulInterface
{
private $secirutyIndetifier;
private $securityRepository
private $stateTransitionManager;
private $state;
private function __construct(
SecurityRepositoryInterface $securityRepository,
StateTransitionManagerInterface $stateTransitionManager
) {
$this->securityRepository = $securityRepository;
$this->stateTransitionManager = $stateTransitionManager;
}
public function getSecurity()
{
return $this->securityRepository->getById($this->secirutyIndetifier);
}
public function changeState(State $newState)
{
if ($this->stateTransitionManager->can($this, $this->state, $newState)) {
$this->state = $newState;
}
}
}
1) Догружать мало используемые в entity данные только при необходимости
2) Не дать возможность сменить состояние без проверки возможности данной операции.
Состояние прикрутил к клиенту, только для примера.
Есть несколько вопросов:
1) На сколько правильно использовать внутри Entity, структуры domain слоя. (Интерфейс репозитория и сервиса проверки возможности смены состояния находятся на доменном уровне)
2) Можно ли вызывать доменные сервисы из сущности?
3) Верно ли таким образом использовать lazy loading?