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

Schludny kontroler

0 głosów
98 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 (65,960 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,920 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,920 p.)
Tak uważam.

Podobne pytania

0 głosów
2 odpowiedzi 139 wizyt
pytanie zadane 15 stycznia 2017 w Java przez Ola Kalisz Początkujący (320 p.)
+1 głos
0 odpowiedzi 348 wizyt
+1 głos
1 odpowiedź 86 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

62,434 zapytań

108,579 odpowiedzi

226,675 komentarzy

35,902 pasjonatów

Przeglądających: 201
Pasjonatów: 18 Gości: 183

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.

...