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?