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

Schludny kontroler

Konferencja JOIN! 2018
0 głosów
92 wizyt
pytanie zadane 11 lipca 2017 w Java przez Jonki Dyskutant (8,220 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 Maniak (52,080 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,880 p.)
Faktycznie słabo to wygląda. Wyniósłbym to do jakiegoś oddzielnego @Service
komentarz 18 lipca 2017 przez Jonki Dyskutant (8,220 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,880 p.)
Tak uważam.

Podobne pytania

0 głosów
2 odpowiedzi 119 wizyt
pytanie zadane 15 stycznia 2017 w Java przez Ola Kalisz Początkujący (320 p.)
+1 głos
0 odpowiedzi 277 wizyt
0 głosów
1 odpowiedź 61 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

55,135 zapytań

99,352 odpowiedzi

204,336 komentarzy

27,137 pasjonatów

Przeglądających: 356
Pasjonatów: 24 Gości: 332

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...