类数据在内部传递或直接访问是否更好?

时间:2010-04-16 23:26:48

标签: oop class-design scope

示例:

// access fields directly
private void doThis()
{
    return doSomeWork(this.data);
}

// receive data as an argument
private void doThis(data)
{
    return doSomeWork(data);
}

第一个选项与this.data中的值相关联,而第二个选项避免了这种耦合。我觉得第二种选择总是更好。它促进了课堂上松散的耦合。无处不在地访问全球类数据似乎是一个坏主意。显然,这个类数据需要在某个时刻直接访问。但是,如果访问,通过参数传递可以消除对这个全局类数据的看法,这似乎总是更好。

第二个例子的优点是可以使用任何正确类型的数据,而第一个例子必须使用正则类数据。即使你不需要额外的灵活性,把它作为一种选择似乎也很好。

我没有看到直接从私有方法访问成员数据的任何优势,如第一个示例中所示。什么是最好的做法?我引用了代码完整,但无法在此特定问题上找到任何内容。

3 个答案:

答案 0 :(得分:3)

  • 如果数据是对象状态的一部分,则private / protected就可以了。选项1 - 好。

  • 我注意到一些开发人员喜欢创建私有/受保护的变量,只是为了在类中的方法之间传递参数,这样他们就必须在方法调用中传递它们。它们并不是真正存储对象的模型/状态。 ......然后,选项1 - 不好。

为什么选项1在这种情况下不好......

  • 仅根据需要进行暴露(变量范围)。因此,传入数据。不要创建私有/受保护的var只是为了在两个方法之间传递数据。
  • 内部计算所有内容的私有方法使其易于理解。保持这种方式,除非它不可避免。
  • 私有/受保护的变量使重构变得更难,因为你的方法不是“自包含”,它取决于可能在其他地方使用的外部变量。
我的2美分! : - )

答案 1 :(得分:2)

在课堂上全球数据不是问题恕我直言。类用于耦合状态,行为和身份。所以这种耦合不是问题。该论点表明,您可以使用来自其他对象的数据调用该方法,甚至可以使用其他类来调用该方法,我认为应该比在类内部进行耦合更加考虑。

答案 2 :(得分:1)

它们都是实例方法,因此#1更有意义,除非你遇到涉及线程的情况(但是根据语言和场景,即使这样你也可以简单地将数据方法锁定/标记为同步 - 我的Java知识生锈了)。

第二种技术更像是程序编程。