公共静态方法 - 一个坏兆头?

时间:2010-07-30 13:06:10

标签: java inheritance static public-method

我刚刚在这里阅读了这篇文章:http://hamletdarcy.blogspot.com/2008/04/10-best-idea-inspections-youre-not.html,最后一点让我想到了我的代码,特别是建议:

  

世界上哪一个公共方法对您的对象做了什么,它不依赖于对象中的任何字段?这肯定是代码味道。问题是检查的“自动修复”是应用static关键字。真是没有。这不是你想要做的。不依赖于对象状态的公共方法不可能是具有明确声明的章程的对象的一部分。它只是没有凝聚力,应该放在其他地方。所以:如果方法是私有的,接受自动修复,但如果方法是公共的,则不要。

有问题的代码本质上是一个对象转换器。它需要一个A类型的对象并将其转换为另一种类型。

我的层次结构是这样的:

Interface ObjectTransformer - > GenericObjectTransformer

然后在此之下,GenericObjectTransformer由ObjectTransformerA和ObjectTransformerB扩展

现在,ObjectTransformerA和ObjectTransformerB都需要一些功能,但实际上并不依赖于GenericObjectTransformer的任何实例变量,因此它是GenericObjectTransformer中受保护的静态方法。

这违反了上述规则吗?显然这是受保护的而不是公开的,但它仍然是一种可以从类外部访问的方法,与类本身无关?

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我不同意你提取的摘录。

  

不依赖于对象状态的公共方法不可能是具有明确声明的章程的对象的一部分。它只是没有凝聚力,应该放在其他地方。所以:如果方法是私有的,接受自动修复,但如果方法是公共的,则不要。

仅仅因为方法是静态的并且与状态无关,并不意味着它属于“低内聚”类别。内聚/功能不是基于状态。

当您尝试确定Cohesiveness时,请考虑整个类的角色,而不仅仅是实例变量。如果您正在查看的逻辑与通用概念(GenericObjectTransformer)相关,则将其保留在那里。

如果计算月球轨道是常规,或者海洋的深度将它移动到公用事业类(我们场地的另一个臭区)。

答案 1 :(得分:0)

感觉有点不洁净,但似乎比我能想到的其他选择更好。

我认为原来的

  

没有任何依赖关系的公共方法   对象状态不可能是一部分   有一个清楚的对象   章程。

你的参考太黑了,你的情况更加严峻。

通过使用受保护的方法,您可以很好地记录其旨在供派生类使用。如果你没有把它放在基类中,那么假设它必须进入一些ObjectTransformUtility类。那是赢吗?更多的人工制品,更多的地方。

一想法:如果您的ObjectTransormer类经历了重大更改,那么您有多大可能需要更改这些实用程序方法。毕竟,如果他们的业务是再次使用对象的界面,那么事实上他们的凝聚力非常高。