转载

Java中POJO、BO、DTO、DO对象简述

  • POJO(Plain Ordinary Java Object):简单对象,专指只有 setter / getter / toString 的简单类,即DO/DTO/BO等领域对象的统称。阿里开发手册规约禁止对象命名成xxxPOJO。
  • DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。xxxDO,xxx为数据表名。
  • DTO( Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。即指数据传输过程中需要用到的对象,如微服务之间需要封装传输的一些对象,或业务层跟持久层之间传输的对象,可以用xxxDTO,xxx 为业务领域相关的名称。
  • BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。在业务逻辑实现过程中,一些DO领域对象的属性需要封装来使用的时候,可以封装成BO业务对象,笔者对BO业务对象理解还不是很深刻,在开发中也只是到DO和DTO而已,没严格地区分BO和DTO。
  • 补充阿里对领域对象的一些规约:

(1)POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。

反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),RPC 框架在反向解

析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

(2)所有的 POJO 类属性必须使用包装数据类型(包装数据类型是指Long、Integer等包装数据类型,而不是基本数据类型long、int等基本数据类型)。

正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。

另外,基本数据类型有默认值,如int不给初始值的时候,默认值是0,而Integer不给初始值是null,故POJO 类属性用包装数据类型比较合理,如果没赋值再判空的时候,本身为null却被初始化为默认值0也是不合理的。

(3)定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。

(4)POJO 类必须写 toString 方法。

(5)禁止在 POJO 类中,同时存在对应属性 xxx 的 isXxx()和 getXxx()方法。

(6)类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO/ PO / UID 等。

正例:JavaServerlessPlatform / UserDO / XmlService / TcpUdpDeal / TaPromotion

反例:javaserverlessplatform / UserDo / XMLService / TCPUDPDeal / TAPromotion

参考资料:

《JAVA 开发手册》

原文  https://segmentfault.com/a/1190000021121397
正文到此结束
Loading...