Spring:控制器和服务层编码标准示例

时间:2014-12-08 08:04:07

标签: java spring spring-mvc coding-style service-layer

我正在查看我的项目代码,并在控制器中找到了以下方法。在网上我发现controller用于接收请求并提供响应。 Service图层用于业务逻辑,Dao图层用于与数据CRUD相关的操作。

在下面的方法中,我可以看到业务逻辑。现在我没有得到哪些代码应该移动到服务层或者下面是好的。

我正在审核代码,所以我需要提供评论,但我很困惑。

       @RequestMapping(value = "/admin/app", method = RequestMethod.POST)
       public ModelAndView saveApp(
                 @ModelAttribute("application") @Validated Application application,
                 BindingResult result) {

          ModelAndView model = new ModelAndView();
          ApplicationFormValidator formValidation = new ApplicationFormValidator();
          boolean messageFlag = false;
          String operationalStatus = null;
          formValidation.validate(application, result);
          if (result.hasErrors()) {
                 model.addObject(APPLICATION, application);
                 model.setViewName(ADD_APP);

          } else {
                 if(checkActive(application)){

                                status = FormBeanValidator.encodeStatus(application.getStatus());
                       application.setStatus(status);
                       // calling service layer and convert model into entity
                       messageFlag = applicationService.addApp(application);

                       if (messageFlag) {
                              Application applicationForm = new Application();
                              applicationForm.setSuccessMessage(PropertyHandler.getPropertyInstance().getPropertyValue(Constants.SUCCESS_MESSAGE));
                              model.addObject(APPLICATION, applicationForm);
                              model.setViewName(ADD_APP);


                       } else {
                              application.setErrorMessage(PropertyHandler.getPropertyInstance().getPropertyValue(Constants.ERROR_MESSAGE));
                              model.addObject(APPLICATION, application);
                              model.setViewName(ADD_APP);

                       }

                 }
                 else{
                        application.setErrorMessage(PropertyHandler.getPropertyInstance().getPropertyValue(Constants.OTHER));
                       model.addObject(APPLICATION, application);
                       model.setViewName(ADD_APP);
                 }
          }
          return model;
   }

2 个答案:

答案 0 :(得分:1)

代码看起来不错,但我建议进行一些修改:

1)您的checkActive(application)似乎检查了有关您的业务对象(应用程序)的内容,因此请将其移至服务层。您可以通过移动checkActive()合并您的checkActive()方法逻辑方法进入服务层并在applicationService.addApp(application)内作为本地方法调用。

2)您一直在ifelse块中将视图名称设置为相同。尝试将此代码移出if-else块,因为它变得多余。< / p>

3)通常只需要将所需的数据从控制器发送到视图。这可以通过创建DTO(数据传输对象)并创建一个将业务对象字段映射到DTO的Converter类来完成。可以查看DTO here

的示例用例

答案 1 :(得分:0)

如果您在ApplicationFormValidator

中检查空格或不正确的格式验证,一切都会正常