• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Schludny kontroler

Cloud VPS
0 głosów
227 wizyt
pytanie zadane 11 lipca 2017 w Java przez Jonki Dyskutant (8,180 p.)

W jaki sposób ogarnąć czystość w kontrolerze? Posiadam taki kontroler

@PostMapping("/forgotUsername")
    public ModelAndView recoverUsername(@ModelAttribute("forgotUsernameDTO") @Valid ForgotUsernameDTO forgotUsernameDTO,
                                        BindingResult result,
                                        ModelMap modelMap) {
        if(result.hasErrors()) {
            modelMap.addAttribute("error", true);

            return new ModelAndView("forgotUsername");
        }

        Optional<User> userOptional = userService.findByEmail(forgotUsernameDTO.getEmail());

        if(userOptional.isPresent()) {
            User user = userOptional.get();
            try {
                JavaMailSenderImpl sender = new JavaMailSenderImpl();

                MimeMessage message = sender.createMimeMessage();

                MimeMessageHelper helper = new MimeMessageHelper(message);

                helper.setTo(user.getEmail());
                helper.setSubject("Recover username");
                helper.setText("Your username: " + "<b>" + user.getUsername() + "</b>", true);

                mailService.sendMail(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }

        modelMap.addAttribute("success", true);

        return new ModelAndView("forgotUsername", modelMap);
    }

który według mnie robi za dużo rzeczy. Chodzi mi o to, że tutaj np. jest bezpośrednie wysyłanie email. Może wypadałoby taką funkcję jak tworzenie wiadomości przenieść do jakiegoś specjalnie stworzonego do tego komponentu. Poradzicie coś?

Potrafię pisać ładne kontrolery

@GetMapping(value = "/getUsers", produces = MediaType.APPLICATION_JSON_VALUE)
    public HttpEntity<List<User>> getUsers(
            @RequestParam(required = false) String q,
            @RequestParam(required = false, defaultValue = "1") int page,
            @RequestParam(required = false, defaultValue = "1") int pageSize,
            @RequestParam(required = false, defaultValue = "id") String sort
    ) {
        return Optional
                .ofNullable(q)
                .map(v -> ResponseEntity.ok().body(userService.findByUsernameContaining(q, page - 1, pageSize, new Sort(Sort.Direction.ASC, sort))))
                .orElseGet(() ->
                        ResponseEntity.ok().body(userService.findAll(page - 1, pageSize, new Sort(Sort.Direction.ASC, sort)))
                );
    }

ale te brzydkie niestety też.

2 odpowiedzi

0 głosów
odpowiedź 11 lipca 2017 przez mbabane Szeryf (79,260 p.)
Duzo zmiennych lokalnych wiec mozna by pomyslec nad osobna klasa do tego.
0 głosów
odpowiedź 18 lipca 2017 przez Mar Cin Dyskutant (8,900 p.)
Faktycznie słabo to wygląda. Wyniósłbym to do jakiegoś oddzielnego @Service
komentarz 18 lipca 2017 przez Jonki Dyskutant (8,180 p.)
Uważasz, żeby cały blok z wysyłaniem wiadomości przenieść do jakiegoś serwisu np. 'MailService'?
komentarz 18 lipca 2017 przez Mar Cin Dyskutant (8,900 p.)
Tak uważam.

Podobne pytania

0 głosów
2 odpowiedzi 463 wizyt
pytanie zadane 15 stycznia 2017 w Java przez Ola Kalisz Początkujący (320 p.)
+1 głos
0 odpowiedzi 1,124 wizyt
0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 16 kwietnia 2023 w Java przez mm Użytkownik (890 p.)

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...