2016-02-18 4 views
0

Я новичок весной, я хотел бы реализовать следующую идею, но я не знаю, работает ли она или что делать, чтобы сделать ее правильной.spring-mvc: split logic, что является лучшей практикой

Так т.е. рабочий процесс:

  1. отправить письмо
  2. для его хранения в базе данных

У меня есть контроллер с двумя методами. Метод «sendEmail» работает отлично, и я должен что-то сделать, чтобы вызвать метод «storeHistory». Я хотел бы воплотить эту идею в академическую красоту (в соответствии с лучшей практикой).

\t @RequestMapping(value={"/sendEmail"}, method=POST) 
 
\t public String sendEmail(EmailDispatchForm form,Model model){ 
 
\t \t String status = "OK"; 
 
\t \t Email domainEmail = emailAdapter.convertEmailFormToServiceEmail(form) ; 
 

 
\t \t logger.debug(form); 
 
\t \t logger.debug(domainEmail); 
 
\t \t 
 
\t \t try { 
 
\t \t \t emailSendService.sendEmail(domainEmail); 
 
\t \t } catch (Exception e) { 
 
\t \t \t status = "ERROR"; 
 
\t \t \t model.addAttribute("errDescription", e.getCause().getMessage()); 
 
\t \t \t logger.error(e, e); 
 
\t \t }finally { 
 
\t \t \t model.addAttribute("sentEmailStatus", status); 
 
\t \t } 
 
\t \t 
 
\t \t return "email_sent_form"; 
 
\t } 
 
\t 
 
\t @RequestMapping(value={"/storeHistory"}, method=POST) 
 
\t public void storeHistory(EmailDispatchForm form, Model model){ 
 
\t \t EMail historyEmail = emailAdapter.convertEmailFormToDomainEmail(form); 
 
\t \t logger.debug(historyEmail); 
 
\t \t dataProvider.storeEmailForHistory(historyEmail); 
 
\t \t 
 
\t }

Конечно я могу сделать это в одном методе, но я хотел бы разделить логику в двух различных методов.

Как вы это сделаете? Возможно, что-то вроде «redirect: storeHistory», но я не уверен, что это хорошая идея, поэтому у меня есть идея.

благодаря

ответ

0

IMO, я думаю, что у вас есть излишне мутит контроллер, как вы описали оба существующих методов контроллера как часть одного и того же процесса. Я думаю, что лучший подход заключается в том, чтобы контроллер был подключен к одному методу уровня обслуживания, который отправляет электронное письмо, а затем сохраняет историю. Вы, конечно же, можете использовать этот уровень обслуживания в нескольких частных методах (чтобы отправить электронное письмо, чтобы сохранить историю), и, конечно, более грациозно решить вопрос о том, что произойдет, если по какой-либо причине письмо не отправлено (что должно результат не запись истории?).

Смежные вопросы