Избегайте дублирования кода в контроллерах и сервисах - PullRequest
0 голосов
/ 15 октября 2019

Я использую Spring Framework.

Я написал довольно длинный код, чтобы сохранить некоторые результаты.

Так что позже выяснилось, что в других контроллерах мне также понадобится этот код. Просто с небольшими отличиями, например, возвращая некоторые другие строки.

Так что, конечно, у каждого контроллера будет свое отображение. Так что параметры все равно будут дублироваться. Но теперь для кода внутри метода отображения.

Я думал поставить код на службу оригинального контроллера. Тогда другие контроллеры будут вызывать эту услугу. Сервис, конечно, будет иметь множество параметров + небольшие различия между контроллерами. Или я должен сделать как общий сервис, иметь хорошую документацию там, потому что, конечно, методы будут общими, и позже я должен знать, для чего они были.

@PostMapping("/testcase") public RedirectView saveResult(Model model, @ModelAttribute("testResultEntity") TestResultEntity testResultEntity, RedirectAttributes redirectAttributes , @RequestParam(required = false) String version , @RequestParam(required = false,defaultValue = "0") String page, @RequestParam(required = false) String operation, Authentication authentication,Locale locale) 
{ // here comes long code, which will be used also in other controllers ; 
} 

1 Ответ

0 голосов
/ 15 октября 2019

Если все сопоставления контроллеров имеют одинаковую подпись, вы можете создать родительский класс с общей реализацией.

Примерно так:

public abstract class BaseAbstractController {

     // specific logic per controller
     abstract String specific();

    public RedirectView save(Model model, @ModelAttribute("testResultEntity") TestResultEntity testResultEntity, 
         RedirectAttributes redirectAttributes, @RequestParam(required = false) String version, 
         @RequestParam(required = false, defaultValue = "0") String page, @RequestParam(required = false) String operation, 
         Authentication authentication, Locale locale) { 
          // here comes long code, which will be used also in other controllers ; 

          String specific = specific();
     }

}

@Controller
public class TestController extends BaseAbstractController {

    @Override
    String specific() {
       return "something"; // here goes your specific logic;
    }

    @PostMapping("/testcase") 
    public RedirectView saveResult(Model model, @ModelAttribute("testResultEntity") TestResultEntity testResultEntity, 
         RedirectAttributes redirectAttributes, @RequestParam(required = false) String version, 
         @RequestParam(required = false, defaultValue = "0") String page, @RequestParam(required = false) String operation, 
         Authentication authentication, Locale locale) { 

          return save(model, testResultEntity, redirectAttributes, version, page, operation, authentication, locale);

     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...