一类的架构和最佳实践?

时间:2018-11-07 09:23:54

标签: java

因此,我负责创建一个与薪酬计算有关的项目。该项目的一个方面是分析适当的输入,例如4:00 PM,其他方面包括计算投入的小时数,工作类型等。

我的问题更多与设计与此相关的类的最佳实践有关。

我应该只有一个类来分析输入字符串吗?一类计算器显示正确的输出,还是应该全部归一类?

两种方法都适合我,但是什么被认为是专业的呢?

即使仅将一个类专用于一个方法,还是最好的方法是根据其独特功能拆分类?

2 个答案:

答案 0 :(得分:1)

在应用程序的边界处,您将通过用户界面或系统界面接受请求。您应该将源自应用程序外部的任何内容都视为不可信且可能有误。例如,如果您收到HTTP请求,则不能保证它是有效的并且包含您期望的字段。如果您从文件中读取文件,则文件的格式可能不正确。

应用程序的边界处应该有一层用于接收输入(最后只是一堆字节)并将其转换为合适类型的Java对象(例如Boolean,LocalDate)的表示形式。如果所有内容都是字符串,则可能是您做错了。如果此层无法执行此操作,则应发送回错误。

将请求表示为正确类型的Java对象后,您的业务逻辑应处理该请求。当通过不同的接口提供数据时,可以使用相同的逻辑,将管道(分析)与业务逻辑(计算)分开。它使业务逻辑更容易进行单元测试。

在将响应输出回用户(或系统)时,应在最后一刻将结构良好的Java对象转换回输出表示形式。

答案 1 :(得分:0)

我建议您看一下Base::Base(string)包和Bean验证JSR的C.481.0

使用这种方法,您可以创建Java类来表示数据并用所需的验证注释它们。触发验证的发生取决于上下文。

在Spring Boot应用程序中,将javax.validation放在接收到的控制器参数上可以达到目的。另请参见以下2.0

@Valid

在独立的应用程序中,可以像cheat sheet那样完成:

  import javax.validation.Valid;
  import com.company.app.model.Article;

  @Controller
  public class ArticleController {

  ...

  @RequestMapping(value="/postArticle", method=RequestMethod.POST)
    public @ResponseBody String postArticle(@Valid Article article, BindingResult result, HttpServletResponse response){

        if(result.hasErrors()){
            String errorMessage = "";
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            List<ObjectError> errors = result.getAllErrors();

            for( ObjectError e : errors){
                errorMessage+= "ERROR: " + e.getDefaultMessage();
            }
            return errorMessage;
        }

        else{
               return "Validation Successful";  
        }
      }
  }