alibaba / p3c

Alibaba Java Coding Guidelines pmd implements and IDE plugin
https://github.com/alibaba/p3c/wiki
Apache License 2.0
30.41k stars 8.06k forks source link

疑问:规约里的POJO定义与业界定义不符,并且内部有定义上的冲突。 #954

Open joeaniu opened 1 year ago

joeaniu commented 1 year ago

规约原文

POJO(Plain Ordinary Java Object) : 在本规约中, POJO 专指只有 setter / getter / toString 的简单类, 包括 DO / DTO / BO / VO 等。

BO(Business Object): 业务对象, 可以由 Service 层输出的封装业务逻辑的对象。

问题描述

显然阿里巴巴规约重新定义了POJO。国际通用的解释是(Plain Old Java Object),其内涵是:不要强制继承或实现特定框架的基类或接口,也不要强制添加annotation,即可称为POJO;

个人观点,这样的重新定义十分不妥,容易造成更大范围的理解分歧。

另外,阿里巴巴的POJO定义,也和第五条BO的定义相互冲突:BO要求封装业务逻辑,而阿里巴巴POJO要求只有getters,setters等,这么明显的冲突应该改掉。 而且, 阿里巴巴POJO非常强烈的暗示使用贫血模型,很不好。

修改建议

阿里巴巴现有的POJO定义等同于Java Bean规范,可以新造一个词类似于Simple Java Bean等;将POJO重新回归业界定义,即Plain Old Java Object,不要制造分裂;