因此,我负责创建一个与薪酬计算有关的项目。该项目的一个方面是分析适当的输入,例如4:00 PM,其他方面包括计算投入的小时数,工作类型等。
我的问题更多与设计与此相关的类的最佳实践有关。
我应该只有一个类来分析输入字符串吗?一类计算器显示正确的输出,还是应该全部归一类?
两种方法都适合我,但是什么被认为是专业的呢?
即使仅将一个类专用于一个方法,还是最好的方法是根据其独特功能拆分类?
答案 0 :(得分:1)
在应用程序的边界处,您将通过用户界面或系统界面接受请求。您应该将源自应用程序外部的任何内容都视为不可信且可能有误。例如,如果您收到HTTP请求,则不能保证它是有效的并且包含您期望的字段。如果您从文件中读取文件,则文件的格式可能不正确。
应用程序的边界处应该有一层用于接收输入(最后只是一堆字节)并将其转换为合适类型的Java对象(例如Boolean,LocalDate)的表示形式。如果所有内容都是字符串,则可能是您做错了。如果此层无法执行此操作,则应发送回错误。
将请求表示为正确类型的Java对象后,您的业务逻辑应处理该请求。当通过不同的接口提供数据时,可以使用相同的逻辑,将管道(分析)与业务逻辑(计算)分开。它使业务逻辑更容易进行单元测试。
在将响应输出回用户(或系统)时,应在最后一刻将结构良好的Java对象转换回输出表示形式。
答案 1 :(得分:0)
我建议您看一下Base::Base(string)
包和Bean验证JSR的C.48和1.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";
}
}
}