如何在同时满足《阿里规约·华山版》OOP规约的12和14条的约束下给类赋默认值?

问题描述

请大家先阅读原文:

12 【强制】 定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性 默认值 。 反例: POJO 类的 createTime 默认值为 new Date(),但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。
14 【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。

我有一个分页请求对象,最核心的基类大概是下面这个样子:

@Data
public class MyPageQO {

    /**
     * 页码
     */
    private Integer pageIndex;

    /**
     * 分页大小
     */
    private Integer pageSize;

}

问题来了,我希望在前端如果没有传入分页参数时,为这个分页对象赋值默认的分页参数,比如第一页,每页十条。

请问:

  • 我应该如何写,才能同时满足第12条和第14条的规定?
  • 如果我有子类继承这个类,我应该如何写?

我的思路

在这里我提出我的思路,我认为可以在类中写protected void init() 函数,并且在子类的构造方法中调用父类的init方法,使得拥有父类的属性是否赋默认值独立开来,不知道我的思路是否正确,还希望实践过这个规约的大神指点迷津,如果有更多需要注意的地方或者踩过的坑,也欢迎您分享您的经验,先谢过大家。

阅读 6k
2 个回答
  1. 放到请求处理里面,用set方法设置默认值
  2. 放到使用该对象的地方,如果get到的为0,就使用默认值

DO的作用仅仅是传递数据,不应该与任何业务逻辑绑定在一起,所以定义init方法之类的并不是太好

父类里定义一个init()方法,在构造器里调用这个方法
子类直接继承就是了,子类默认的无参构造器默认会调用父类的默认无参构造器,这个可以自己写个小例子印象会深刻点,具体可看这里:java中继承,子类是否继承父类的构造函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题