Проектирую приложение. Есть следующие понятия:
- компоненты
- модули
- ядро
У меня возникла следующая дилема:
Есть компонент auth, jwt и модуль User. Дело в том, что мне нужно произвести аутентификацию пользователя по логину и паролю (отвечает компонент auth), выдать пользователю jwt токен (при этом сделав все нужные записи в базу, компонент jwt) ну и собственно воспользоваться сущностью User и репозиторием из модуля User.
Выходит так, что каждый из компонентов должен знать про модуль User (точнее про сущность User и репозиторий).
Однако хотелось бы все это дело со связностью уменьшить до минимума.
К примеру как будет выглядеть компонент аутентификация:
public function attempt(CredentialsDTO $credentials)
{
$username = $credentials->getUsername();
$password = $credentials->getPassword();
if ($passwordHash = $this->userRepository->findPasswordHashByUsername($username)) {
if ($this->hasher->check($password, $passwordHash)) {
$user = $this->userRepository->findByUsername($username);
// TODO: сгенерировать jwt токен
}
}
return false;
}
Как получается компоненту auth нужна сущность User, репозиторий, и еще компонент jwt для генерации токена.
Как бы правильно уйти от этой связанности ?