首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类的架构,以及最佳实践?

类的架构,以及最佳实践?
EN

Stack Overflow用户
提问于 2018-11-07 17:23:54
回答 2查看 67关注 0票数 0

所以我负责创建一个与薪酬计算有关的项目。该项目的一个方面是分析适当的投入,如下午4点,以及其他方面,包括计算投入的小时工资,以及工作类型等。

我的问题更多的是关于围绕这一点设计类的最佳实践。

我是否应该有一个类来分析输入字符串,并且只做这件事?和一个类用于计算器显示正确的输出,还是应该全部放在一个类中?

这两种方式对我来说都很好,但是什么是专业的呢?

根据类的独特功能拆分类是不是最佳实践,即使您将一个类专门用于一个方法?

EN

回答 2

Stack Overflow用户

发布于 2018-11-07 17:45:36

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

在应用程序的边界上应该有一个层,它接受输入(最后只是一堆字节),并将其表示为适当类型的Java对象(例如Boolean、LocalDate)。如果所有东西都是字符串,那么您可能做错了。如果这一层不能做到这一点,它应该发回一个错误。

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

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

票数 1
EN

Stack Overflow用户

发布于 2018-11-07 17:43:22

我建议您看一下javax.validation包和Bean Validation JSR的1.02.0

使用这种方法,您可以创建Java类来表示数据,并使用所需的验证对其进行注释。触发验证的发生在一定程度上取决于上下文。

在Spring Boot应用程序中,将@Valid放在接收到的控制器参数上可以做到这一点。另请参阅此cheat sheet

代码语言:javascript
复制
  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";  
        }
      }
  }

在一个独立的应用程序中,它可以像this一样完成

代码语言:javascript
复制
public class BeanValidationExample {
  public static void main (String[] args) {
    Configuration<?> config = Validation.byDefaultProvider()
                                        .configure();
    ValidatorFactory factory = config.buildValidatorFactory();
    Validator validator = factory.getValidator();
    factory.close();

    Person person = new Person();
    person.setDateOfBirth(new Date(System.currentTimeMillis() + 10000));

    Set<ConstraintViolation<Person>> violations = validator.validate(person);
       violations.forEach(v -> System.out.println(v.getPropertyPath() +
                                                      "- " + v.getMessage()));
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53186574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档