-
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 开发手册》