spring-mvc:拆分逻辑什么是最佳实践

时间:2016-02-18 16:08:24

标签: spring-mvc

我是春天的新手,我想实现以下想法,但我不知道它是否有效或如何使其正确。

因此工作流程是:

  1. 发送电子邮件
  2. 将其存储在数据库中
  3. 我有一个带两种方法的控制器。方法" sendEmail"工作正常,我必须做一些事情来调用方法" storeHistory"。我想在学术上很好地实现这个想法(根据最佳实践)。

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

    当然我可以用一种方法来做,但我想用两种不同的方法分割逻辑。

    你会怎么做? 也许就像"重定向:storeHistory",但我不确定这是一个好主意,所以我现在有了想法。

    感谢

1 个答案:

答案 0 :(得分:0)

IMO,我认为你所拥有的不必要地使控制器变得混乱,因为你将现有的两种控制器方法都描述为同一工作流程的一部分。 我认为最好的方法是将控制器连接到单个服务层方法,该方法既发送电子邮件,又存储历史记录。您当然可以将该服务层调用到几个私有方法(发送电子邮件,以保存历史记录),当然更优雅地解决如果由于某种原因未发送电子邮件会发生什么的问题(应该导致写历史?)。