Это плохая практика, чтобы передать ответ http сервлета в моем слое обслуживания? - PullRequest
2 голосов
/ 10 февраля 2012

В моем методе входа в систему службы аутентификации мне нужно создать cookie и установить идентификатор сессии в cookie.

Плохо ли передавать объект запроса моему уровню обслуживания внутри действия контроллеров?

public void login(String email, String password) {

   User user = someService.validate(email, password);

   if(user != null) {
      // create session
      // set cookie ????
   }

}

Мое действие контроллера вызовет метод входа в систему выше, перепутанный, где я должен был создать и установить идентификатор сеанса для моего куки.

Для меня имеет смысл иметь это на уровне сервиса, но тогда мой метод входа в систему будет тесно связан с веб-приложением.

Я правильно делаю?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

Да (для «плохой практики»), нет (для «правильной работы»).

Уровень обслуживания должен быть полностью отделен от всего, что имеет отношение к сети.Только веб-слой должен отвечать за управление артефактами веб-слоя, включая файлы cookie.

Таким образом, сервис может использоваться даже в том случае, если файлы cookie не существуют, например, приложение для ПК или CLI.Это также позволяет тестировать сервис, вообще не рассматривая веб-слой, что имеет смысл - сервису все равно как происходит аутентификация или что происходит после - работает только то, что используется имя пользователя и пароль.

1 голос
/ 10 февраля 2012

Да.Постарайтесь превратить сетевые сообщения в доменные объекты как можно скорее, и не предпринимайте никаких действий, пока не решите, что все сообщение правильно сформировано и авторизовано.

Ваш код будет более понятным и безопаснымесли вы можете изолировать код, который имеет дело с грязными ненадежными входами, от кода, который реализует бизнес-правила и вводит изменения на основе объектов домена, от кода, который форматирует ответ для внешнего мира.

Если вы можете отделитьВаш сервис в:

  1. Простой слой, который превращает HTTP-запрос в объекты домена,
  2. (возможно, сложная) операция над объектами домена, которая приводит к результату,
  3. Простой слой, который превращает результат в HTTP-ответ

, тогда вы можете сосредоточиться на модульном тестировании на 2, не беспокоясь о создании и заполнении объектов-запросов и ответов на заглушки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...