Posiadam przykładowe dwa serwisy
private AuthorizationService authorizationService; private SecurityService securityService;
których używam do procesu logowania(tworzenie ciasteczek itd.). Kontroler, który za to odpowiada to
@GetMapping("/signInSuccessfully") public ModelAndView signInSuccessfully(HttpServletRequest request) { if(authorizationService.isLoginProcess(request)) { authorizationService.login(); } return new ModelAndView("redirect:/"); }
który wykorzystuje jeden z powyższych serwisów.
Natomiast w serwisie
AuthorizationService
niektóre metody korzystają z innego serwisu
@Service public class AuthorizationServiceImpl implements AuthorizationService { private SecurityService securityService; @Autowired public AuthorizationServiceImpl(SecurityService service) { this.securityService = service; } @Override public boolean isLoginProcess(HttpServletRequest request) { return true; } @Override public boolean login() { String username = securityService.getUsername(); System.out.println(username); return false; } }
i tu pojawia się ten mój problem. Czy jest to prawidłowy sposób na używanie serwisu, czy może nie powinienem zawiązywać innych serwisów w serwisie, a przekazywać tylko bezpośrednio z kontrolera parametry do metody, czyli np. zmiana kontrolera na
@GetMapping("/signInSuccessfully") public ModelAndView signInSuccessfully(HttpServletRequest request) { if(authorizationService.isLoginProcess(request)) { authorizationService.login(securityService.getUsername()); } return new ModelAndView("redirect:/"); }
i
@Service public class AuthorizationServiceImpl implements AuthorizationService { @Override public boolean isLoginProcess(HttpServletRequest request) { return true; } @Override public boolean login(String username) { System.out.println(username); return false; } }
Wtedy w serwisie nie ma żadnego innego serwisu i jest zachowana zasada SOLID. Jak uważacie?