Java 冲突;“扩展设计”;原则和存取者(获取者)/变异者(设定者)思想

Java 冲突;“扩展设计”;原则和存取者(获取者)/变异者(设定者)思想,java,javabeans,pojo,checkstyle,Java,Javabeans,Pojo,Checkstyle,背景: 像CheckStyle这样的代码分析器包含特殊的。它实施了真正特殊的类设计方法。对我来说,这确实是一件有争议的事情。这里是这种设计方法的一部分。关键是保护超级类不被修改,只留下小的“漏洞”。或者你把你的课作为期末考试。对于安全库设计的某些情况来说,这绝对是好的 另一方面,我们可以隐藏所有数据成员,只提供公共(或受保护的)访问器(getter)和变异器(setter)。拥有现实生活中的豆子,这使得它们几乎不可能像我认为的那样被扩展。据我所知,唯一的方法是聚合bean并重新实现所有需要的访问

背景:

像CheckStyle这样的代码分析器包含特殊的。它实施了真正特殊的类设计方法。对我来说,这确实是一件有争议的事情。这里是这种设计方法的一部分。关键是保护超级类不被修改,只留下小的“漏洞”。或者你把你的课作为期末考试。对于安全库设计的某些情况来说,这绝对是好的

另一方面,我们可以隐藏所有数据成员,只提供公共(或受保护的)访问器(getter)和变异器(setter)。拥有现实生活中的豆子,这使得它们几乎不可能像我认为的那样被扩展。据我所知,唯一的方法是聚合bean并重新实现所有需要的访问器/变异器。但这会严重降低性能

我在2011年的默认配置文件中看到了声纳。请注意今年有一个人回来重新检查;-)

问题:

因此,我计划从Sonar质量概要中删除“扩展设计”规则,主要是因为它使POJO的重用变得更加困难,但我怀疑我是否遗漏了一些方法,这些方法允许使用访问器/变异器对类进行可用继承,从而对后代保持良好的安全性。有什么标准方法可以改变我的想法吗?采用“扩展设计”方法能否解决这一冲突


对不起,我在Java没有10年的时间,所以我可能会错过一些重要的东西

我会实事求是地问,你的代码的使用者是谁。如果这是一个广泛的(公众)观众使用的框架,那么你可能希望仔细考虑你的扩展点。一部分是为了表达你的意图,一部分是为了保护那些不应该改变的部分。但是,如果这是供内部使用的,受众较少,那么大家都可以同意稍微放松一点。

我会实事求是,问问代码的使用者是谁。如果这是一个广泛的(公众)观众使用的框架,那么你可能希望仔细考虑你的扩展点。一部分是为了表达你的意图,一部分是为了保护那些不应该改变的部分。然而,如果这是为了在内部使用,受众较少,那么大家都可以同意放松一点。这是关键,这是相对较小公司的内部组成部分。。。但这是大数据基础设施的核心组件,因此在某些方面被大多数项目广泛使用。这引起了我的怀疑。然而,我得出的结论是,我可以忽略扩展安全性,因为所有用户都是已知的。所以我决定不遵循这种“扩展设计”的方法。但重新思考你的方法总是好的不知道这个约定是否有名称:但是在您重写的每个方法中强制调用
super
-方法怎么样?这确保了扩展类的正确扩展,而不是在基类中强制扩展。@Romski的评论应该是imho的答案。我通常不会要求类按照检查的精神“设计为扩展”。但是如果你有一个你知道会被大量扩展的类,你可以使用检查来确保你仍然控制着扩展点。