nepster-web
@nepster-web

Как уменьшить связанность компонентов?

Проектирую приложение. Есть следующие понятия:
- компоненты
- модули
- ядро

У меня возникла следующая дилема:
Есть компонент 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 для генерации токена.
Как бы правильно уйти от этой связанности ?
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 1
@shagguboy
передавать всё нужное для работы класса ил в конструктор, или в метод, или насаживать через сеттеры. классический Inversion of control
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы