2010-11-16 50 views
13

因此,实例变量与参数传递?有争论吗?

我一直在努力对最近的一些遗留代码进行重新分解,并且发现自己质疑我一直在做的一些重新分解决定的有效性。一个这样的查询是关于使用实例变量来在对象内的方法之间共享对象。

具体来说,有许多地方构造函数&方法已被分割,本地变量提升为实例变量,允许从现在分开的方法访问。对我而言,这似乎是错误的。它打破了封装,改变了范围并且可能影响生命周期,然而,其中一些类与性能相关,因此我想知道重新分解这些方法使用参数传递的含义可能是什么?

更重要的是,我想知道我的假设是否还能持续用水?在涉及私有方法之间共享时,参数传递的对象优于实例变量吗?

回答

8

在加上网站这种方式你不必将这些参数传递给其他方法。当一个方法有三个以上的参数时(根据Robert Martin's Clean Code),代码的可读性开始快速下降。我想你应该混合这两种方法来打赌最好的结果。

你可以做的是看看你是否可以从现有的一部分中提取一个新的类。当只有部分方法使用这些实例字段时,可能这些方法正在做一些可以抽象的事情。通过这种方式,您可以创建一个新的实例字段作为构造函数参数或属性并实例化它。

7

我绝对认为你不应该只是采取局部变量,并使它们的实例变量只是为了避免在左右传递它们。由于你已经列举的原因,这绝对不是一个好主意,包括它使课堂本身膨胀的事实。

该实例变量代表的是该类的一个属性,而不是该类的属性是否可以一般处理。这将取决于该类所代表的实体。 但是,这种设计与课程本身的设计有关,也许它需要被重新考虑的整体课程设计

如果也许你提供你指的是重构的一个例子,它可能有助于在这方面

+0

+1提供一个更好的答案,它确实听起来像码味。 – 2010-11-16 11:10:28