代码之家  ›  专栏  ›  技术社区  ›  Jeff Yates

解释重构[关闭]

  •  8
  • Jeff Yates  · 技术社区  · 16 年前

    我的问题是,如何教授整理和重构代码的方法和重要性?

    出身背景

    我试图解释我是如何确定我们可以重构的地方,以及每次重构如何经常突出新的领域。例如,有两个变量存储相同的信息-为什么?我猜这是一个更大问题的解决办法,所以我拿出一个变量,把兔子赶下了洞,在我们前进的过程中发现了其他问题。这最终导致我们发现了一个问题,在这个问题上我们多次重复同样的事情。这在很大程度上是由于使用了幻数大小的数组,混淆了正在进行的工作——修复了最初的“双变量”问题导致了这一发现(以及其他发现)。

    我觉得坐在一起做这件事的过程对我自己(我学到了更多关于如何最好地向他人解释事情的知识)和我的同事(他们了解了更多我们的代码和我们的编码实践)都是值得的,但是,这段经历让我怀疑是否有更好的方法来教授重构过程。

    …最后。。。

    我知道什么需要重构,什么不需要重构,以及如何重构都是非常主观的,所以我想避开这一讨论,但我有兴趣了解其他人如何应对教授这一重要技能的挑战,以及这里的其他人是否有过类似的经验,以及他们从中学到了什么(作为老师或学生)。

    9 回复  |  直到 11 年前
        1
  •  3
  •   Cade Roux    16 年前

    像大多数编程一样,重构技能需要实践和经验。认为它可以被教授是很好的,但是它必须被学习——而且在不同的环境中可以完成的学习量有很大的差异。

        2
  •  2
  •   Patrick Desjardins    16 年前

    Code Smell 它包含了很多你可以展示给其他人的例子。

    这是一个 list 何时应该使用重构(代码气味列表)

        3
  •  2
  •   Brian Sullivan    16 年前

    如果你还没有读过,马丁·福勒有一本关于这个主题的好书,叫做 Refactoring: Improving the Design of Existing Code . 他详细介绍了如何以及为什么重构特定代码段。

    我甚至不敢提及这本书,因为我担心有人问起重构的问题时会假定我知道这本书,你会想,“嗯,我是说 此外

        4
  •  2
  •   Paul Croarkin    16 年前

    你没提到考试。要“证明”重构不会破坏现有功能,您需要在进行重构之前进行现有测试或编写测试。

        5
  •  1
  •   casademora    16 年前

    结对编程似乎是我理解这一点的最佳方式。这样,当我们在处理真实的生产代码时,我们都会遇到一些闻起来不对劲的代码,我们一起处理代码重构。这两个人扮演着司机的良知角色,告诉司机要做正确的事情,而不是快速修复,反过来,他们都会在这个过程中学习好的代码。

    重构可以是一门艺术,需要实践。你做得越多,做得越好。继续学习Martin Fowler的Ractoring书中描述的方法,并使用您的工具(Resharper for Visual Studio folk)

        6
  •  1
  •   dirtside    16 年前

    一种简单的重构方法就在它的名字里——就像从等式中提取一个公共变量一样:

    xy + xz
    

    变成

    x(y + z)
    

    x已经算出了。重构代码也是一回事,因为您会发现重复的代码或逻辑并将其分解。

        7
  •  1
  •   Mr Fooz    16 年前

    听起来你的方法很好。在流程结束时,您展示了如何发现和修复许多问题。出于教育目的,发明新的更改/增强/修复可能会很有趣。然后,您可以询问您的导师,他们将如何使用旧的代码库和新的代码库来实施该更改。希望他们能看到,通过重构代码进行新的更改要容易得多(或者说,进行更多的重构是为假设的更改做准备的最简单的方法)。

        8
  •  1
  •   JB King    16 年前

    我看到了几种不同的方法可以尝试教授重构:

    给出教科书式的例子。这里的一个缺点是,您可能有一些人为的或过于简单的例子,说明重构为什么有用,但这些例子并不一定像在其他情况下那样明显。

    这并不是人们可以立即学会的东西,它需要时间、实践、努力和耐心,因为某些重构可能是出于个人喜好而进行的,而不是因为代码以某种方式以最佳方式运行。

        9
  •  1
  •   Bryan Anderson    16 年前