#20 MainController – dlaczego trzymanie wszystkiego w jednej klasie jest złe? – Szlifujemy backend cz.3

Trzymanie wszystkiego w jednej klasie jest złe i chyba na tym mógłbym zakończyć ten post… Ale dlaczego?

Pewnie każdemu z Was zdarzyło się trzymać wszystkie „drobne” rzeczy w jednej klasie, przecież tylko coś „sprawdzaliście”, „czy to będzie działać”, a potem? A potem już tak zostawało i robił się bałagan. Otwierasz klasę a tam kilkanaście metod, które nie są ze sobą powiązane (nie tyczą się tej samej rzeczy) i zawsze tracisz swój czas szukając tego co chcesz znaleźć.

Efektowne to raczej nie jest, życia nam nie ułatwia lecz pewnie wszyscy przez to przechodzili, nawet najprostszy podział (chyba ciężko jest znaleźć inny) pozwoli nam pracować o wiele szybciej – a szybciej znaczy wydajniej.

Sam się na tym złapałem dlatego dzisiaj pokażę Wam jak wyglądała moja klasa MainController niezbyt ciekawie ale pewnie mogło być o wiele gorzej:

ublic class MainController{

@Autowired
private UserService userService;

@RequestMapping(value="/home", method = RequestMethod.GET)
public ModelAndView home(){
ModelAndView modelAndView = new ModelAndView();
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
User user = userService.findUserByEmail(auth.getName());
modelAndView.addObject("userName", "Welcome " + user.getName());
modelAndView.addObject("adminMessage","Content Available Only for Users with Admin Role");
modelAndView.setViewName("/home");
return modelAndView;
}

@RequestMapping(value = "/addImage", method = RequestMethod.POST)
public @ResponseBody void addImage(@RequestBody Image image) {imageService.saveImage(image); }

@RequestMapping(value = "/{image}" )
public String redrict() {
return "image";
}

@RequestMapping(value={"/", "/login"}, method = RequestMethod.GET)
public ModelAndView login(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("login");
return modelAndView;
}

@RequestMapping(value="/registration", method = RequestMethod.GET)
public ModelAndView registration(){
ModelAndView modelAndView = new ModelAndView();
User user = new User();
modelAndView.addObject("user", user);
modelAndView.setViewName("registration");
return modelAndView;
}

@RequestMapping(value = "/registration", method = RequestMethod.POST)
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) {
ModelAndView modelAndView = new ModelAndView();
User userExists = userService.findUserByEmail(user.getEmail());
if (userExists != null) {
bindingResult
.rejectValue("email", "error.user",
"There is already a user registered with the email provided");
}
if (bindingResult.hasErrors()) {
modelAndView.setViewName("registration");
} else {
userService.saveUser(user);
modelAndView.addObject("successMessage", "User has been registered successfully");
modelAndView.addObject("user", new User());
modelAndView.setViewName("registration");

}
return modelAndView;
}

@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
System.out.println(principal.getName());
return principal.getName();
}

@RequestMapping(value="/user/home", method = RequestMethod.GET)
public ModelAndView hsomeas(){
ModelAndView modelAndView = new ModelAndView();
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
User user = userService.findUserByEmail(auth.getName());
modelAndView.addObject("userName", "Welcome " + user.getName() + ")");
modelAndView.addObject("adminMessage","Content Available Only for Users with Admin Role");
modelAndView.setViewName("/home");
return modelAndView;
}}

Jak sami widzicie trochę tego jest i żeby znaleźć potrzebny nam Controller mijało cennych sekund, dlatego podzieliłem to najprościej jak mogłem i już pracuje się o wiele lepiej.

Można? Można a to wszystko zajęło mi tyle ile łącznie dziennie spędzałem na szukaniu odpowiedniej linijki. Teraz jest jasno i klarownie. Dlatego polecam Wam zadbać o „czystość” swoich projektów i dbać o ich organizację.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *