J'ai lu de nombreuses théories sur les différences entre la couche de service et le contrôleur, et j'ai quelques questions sur la manière de réaliser cela en pratique. Une réponse à Couche de service et contrôleur : qui gère quoi ? dit:
J'essaie de limiter les contrôleurs à effectuer des tâches liées à la validation des paramètres http, à décider quelle méthode de service appeler avec quels paramètres, à mettre dans la session https ou la requête, à rediriger vers quelle vue, ou à effectuer des tâches similaires liées au web.
Drapeaux rouges : Mon architecture de contrôleur pourrait ne pas être bonne si :
Le contrôleur effectue trop de requêtes à la couche de service. Le contrôleur effectue un certain nombre de requêtes à la couche de service qui ne renvoient pas de données. Le contrôleur effectue des requêtes à la couche de service sans passer d'arguments.
En ce moment, je développe une application web avec Spring MVC, et j'ai cette méthode pour enregistrer l'e-mail modifié de l'utilisateur:
/**
*
Vous pouvez voir que j'ai beaucoup de requêtes à la couche de service, et je fais des redirections depuis le contrôleur - c'est de la logique métier. Veuillez montrer une meilleure version de cette méthode.
Et un autre exemple. J'ai cette méthode, qui renvoie le profil de l'utilisateur:
/**
* Retourne {@link ModelAndView} le profil du client
* @param user - le principal, à partir duquel nous obtenons {@code Client}
* @throws UnsupportedEncodingException
*/
@RequestMapping(value = "/profile", method = RequestMethod.GET)
public ModelAndView profile(Principal user) throws UnsupportedEncodingException{
Client clientFromDB = (Client)clientService.getUserByEmail(user.getName());
ModelAndView model = new ModelAndView("/client/profile");
model.addObject("client", clientFromDB);
if(clientFromDB.getAvatar() != null){
model.addObject("image", convertAvaForRendering(clientFromDB.getAvatar()));
}
return model;
}
La méthode convertAvaForRendering(clientFromDB.getAvatar()) est placée dans la super-classe de ce contrôleur, c'est un bon endroit pour cette méthode, ou doit-elle être placée dans la couche de service ?
Aidez s'il vous plaît, c'est vraiment important pour moi.