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

时间:2010-11-16 10:16:04

标签: c# design-patterns variables constructor instance

所以,

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

具体来说,有很多地方建设者和方法已被拆分,局部变量被提升为实例变量,允许从现在单独的方法进行访问。对我来说,这似乎是错误的。它破坏了封装,改变了范围并且可以影响生命周期,但是,这些类中的一些是性能相关的,因此我想知道重新分解这些方法以使用参数传递的含义是什么呢?

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:9)

我绝对认为你不应该只是采用局部变量并使它们成为实例变量以避免传递它们。对于你已经列举过的原因,这绝对不是一个好主意,包括它本身就会膨胀的事实。

该实例变量所代表的是该类本身的属性是否可以通用。它取决于该类所代表的实体。 但是,这种设计与课程本身的设计有关,也许是需要重新审视的整体课程设计

如果你提供一个你所指的重构的例子,那么在这种情况下提供更好的答案可能会有所帮助