代码之家  ›  专栏  ›  技术社区  ›  Roja Buck

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

  •  14
  • Roja Buck  · 技术社区  · 15 年前

    所以,

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

    具体来说,在许多地方,构造函数和方法被拆分,局部变量被提升为实例变量,从而允许从现在独立的方法进行访问。对我来说,这似乎是错的。它会破坏封装、改变作用域并可能影响生命周期,然而,其中一些类与性能相关,因此我想知道将这些方法重新分解以使用参数传递的含义是什么?

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

    2 回复  |  直到 15 年前
        1
  •  9
  •   Jagmag    15 年前

    我绝对认为你不应该把局部变量变成实例变量 只是为了避免把它们传来传去 . 这绝对不是一个好主意,因为您已经列举了一些原因,包括它会使类本身膨胀。

    该实例变量所代表的是该类本身的属性,而不是一般可以解决的问题。它将取决于类所表示的实体。 然而,这个设计与类本身的设计相关联,也许它的整个类设计需要重新定位 .

    如果您提供了一个您所指的重构示例,那么在该上下文中提供一个更好的答案可能会有所帮助。

        2
  •  9
  •   Steven    15 年前

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

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