Req类是对前端参数的封装,工作在web控制层,需要对前端传过来的参数进行裁剪和校验,防止参数注入和参数输入异常;
    Dto类是对传输数据的封装,工作在service层和数据持久层之间,是对web层参数的进一步封装和业务数据层的进一步封装;
    Entity类是数据和业务实体,工作在数据持久层,需要和数据库进行一对一的对应,是最基础的数据模型,定义为最简单的POJO类,如无必要,不要增加其中的转化方法;
    Vo类是数据显示类,工作在service层和web控制层之间,用于封装要展示给前端的数据;

    其他类型定的数据封装,如Req类或者RO,DTO,VO等根据需要,添加必要的转化方法,一般原则有:

    1. 层级隔离:也就是每一层的数据传输和表达只在本层进行传输表达,如果需要跨层传递数据的话,就需要转换成相应层的数据形式;
    2. 上一层的数据要提供下一层的数据转换,包装和封装,下一层的数据可以不提供上一层的数据转换和封装,因为上一层依赖下一层,而下一层无需依赖上一层的实现;
    3. 自身数据向其他数据的转换使用to开头的成员方法如:toString(),toVo(),toDto(),toEntity(),xxxValue();
    4. 为了防止NullpointException的出现,也是可以使用静态方法的:toString(object),toVo(object),toDto(object);valueOf(Object),xxxValue(Object);
    5. 如果是需要封装其他层传过来的数据的话,需要使用静态方法:valueOf(),parse(),from()因为参数可以使用多态方法重载,可以通过参数类型类解析不同的类型到自身,针对不同类型的封装可以使用同一个方法签名进行;



    本文参考了Java包装类接口设计

    Req,POJO,DTO,Vo,Entity之间的相互转化接口设计 - 图1