Java样式/最佳实践 - 将字段传递给方法直接访问

时间:2010-12-14 16:18:55

标签: java

在Java中,给出以下类:

public class MyClass {
   private final Dependency dependency;
   public MyClass(Dependency dependency)
   {
       this.dependency = dependency;
   }

   public void doWork()
   {
       // validate dependency...
   }

doWork方法需要调用使用dependency的方法。

以下哪两种变体被视为“最佳做法”,为什么?

   // Access dependency directly
   void validateDependency()
   {
        this.dependency.something();
   }

   // access dependency as passed to the method
   void validateDependency(Dependency dependency)
   {
       dependency.something();
   }

我发现自己偏爱后者,将依赖项直接传递给方法,因为它使得该方法更容易单独测试(尽管是边缘)。

但是,我对这里的java惯例/最佳实践很感兴趣。

4 个答案:

答案 0 :(得分:11)

存在一个类,因为您具有与该状态耦合的状态和操作。将该状态的一部分作为参数传递给类方法是没有充分理由的。

事实上,它会向我表明这件国家不应该属于这个阶级。或者该方法不属于该类。

使用参数“以便更容易进行单元测试”是后者保持的一个很好的指示(该方法不应该在类中)。

答案 1 :(得分:3)

嗯,在你的例子中,你要求函数对Dependency做一些事情,它适用于静态函数,而不是成员函数。

我的经验法则是:在拥有该成员的对象上调用方法时直接使用成员,但在执行/测试与依赖项直接相关的内容时传递引用,并为后者支持静态方法

有点冗长,但我希望它有所帮助。一如既往地尝试“做正确的事”和差异,这个小的不太可能对代码的维护或可读性产生巨大影响。

答案 2 :(得分:-1)

没有正确的方法可以做到这一点。我更喜欢把变量放在那里。

答案 3 :(得分:-1)

依赖注入。第二个选项是“最好的”。

如果将“Dependency”类设为接口,则会使代码更加模块化,更易于测试,更少耦合。