数据传递规范的讨论

想要把代码写好,最近在看几个开源的项目。发现项目对model的分类是很精细的。

通过查阅资料以及代码的阅读,总结出下图,想请教一下各位前辈,我的理解是否有错?

1、与数据库表结构一一对应的是Entiry

2、前端发送的数据对应Param,如登入请求:

@Data
@ToString
public class LoginParam {

    @NotBlank(message = "用户名或邮箱不能为空")
    @Size(max = 255, message = "用户名或邮箱的字符长度不能超过 {max}")
    private String username;

    @NotBlank(message = "登录密码不能为空")
    @Size(max = 100, message = "用户密码字符长度不能超过 {max}")
    private String password;

    @Size(min = 6, max = 6, message = "两步验证码应为 {max} 位")
    private String authcode;

}

2、Controller会对Param进行校验,如上制定一定的数据规范

3、Service则会对传进来的参数,做真正的逻辑处理。并调用对应的Jpa方法。

4、最后将获得的数据,做一步转化再返回前端。

嗯,是这意思。

Controller中的参数校验和Service中的参数判空等操作能不能合为一步呢?

只是做一步断言:

 Assert.notNull(sort, "Sort info must not be null");

当然可以。参数的校验,传递。怎么适合怎么来。你一共俩参数。犯不上在controller定义一堆对象,又在service定义一堆对象。

而且有些验证规则比较麻烦,靠这种注解验证实现不了。例如:第一个参数的验证规则,要根据第二个参数值来完成 这种情况就必须要自己写代码判断了。

测试多用 Assert。一般业务代码可以用 Objects

Objects.requireNonNull(sort, "sort 不能为null");