【问题标题】:Good examples when teaching refactoring?教重构时的好例子?
【发布时间】:2009-07-27 19:23:57
【问题描述】:

我正在为一些询问重构和模式如何结合在一起的同事运行重构代码道场,我需要一个示例代码库。任何人都知道一个不错的起点,他们无法对代码进行正面或反面,但可以重写他们的方式以获得有用的东西?

【问题讨论】:

    标签: refactoring


    【解决方案1】:

    我实际上建议重构您和您同事的一些代码。

    总有一些地方可以重构现有代码库,熟悉现有代码将有助于使其感觉更像是一个有用的东西,而不是一个练习。如果可能,请在您公司的代码中找到一些内容以用作示例。

    【讨论】:

    • 遵循 Thorarin 的回答:代码重复通常是重构最明显的目标,所以我建议首先寻找它。
    【解决方案2】:

    这里有一些代码,包括原始版本和重构版本,因此您可以准备 kata 或在执行重构后简单地比较结果:

    1. 我的书既有较短的示例,也有较长的示例,实际上是一本书的示例。代码可免费下载。
      VB Code Examples
      C# Code Examples

    2. 来自Refactoring Workbooknice example

    3. 互联网上有很多简单游戏的例子,比如井字游戏或Snake,它们有很多味道,但足够简单,可以从重构开始。

    【讨论】:

      【解决方案3】:

      Martin Fowler“重构”的第一章是重构的一个很好的起点。当我在学校的一位老师使用这个例子时,我理解了大部分概念。

      【讨论】:

      【解决方案4】:

      您同事的一般知识水平如何?

      一些基本的代码重复应该很容易让他们理解。两段(几乎)相同的代码可以重构为可重用的方法、类等。使用您自己代码库中的(过去)示例会很好。

      【讨论】:

        【解决方案5】:

        我建议您针对特定需求开发一个简单的示例项目。

        然后您再添加一项需求并对现有类进行更改。您继续这样做并向他们展示当代码设计不正确时您如何发现难以进行每次更改。这将使他们很容易意识到,因为这就是这些人在日常工作中将要做的事情。让他们意识到,如果不从一开始就遵循模式和原则,他们将如何最终陷入混乱。

        当他们意识到这一点时,你就从头开始,或者重构现有的混乱代码。现在添加一个需求,让他们意识到对重构的代码进行更改是很容易的,这样你只需要测试一个几节课。一项更改不会影响其他更改,依此类推。

        您可以使用计算机、键盘和打印机类作为示例。添加要求,例如,您希望计算机从鼠标读取,然后再增加一项要求,例如您的计算机希望将其保存在硬盘中而不是打印。最后你重构的代码应该是这样的,你的计算机类应该依赖于抽象输入设备类和输出设备类。而且你的键盘类应该继承自 Inputdevice 类。

        【讨论】:

          【解决方案6】:
          【解决方案7】:

          我喜欢Refactoring Guru 的例子。 在那里您也可以找到设计模式示例。

          【讨论】:

            【解决方案8】:
            • 当代码执行正确的功能时,重构是非功能性要求,但它的设计却难以调试,需要更多的维护工作和一些性能瓶颈。重构就是要改变为易于维护、良好的可读性和提高效率。

            因此,我们需要关注标准以使代码更易读、更易于维护。

            • 很明显,拥有非常大的方法/函数可能难以理解。
            • 类依赖于其他数百个类使调试时最糟糕。
            • 代码应该像阅读某些工作流一样可读。

            您还可以使用声纳等工具来帮助您识别关键标准,例如“圈复杂度”

            http://www.sonarsource.org/managing-cyclomatic-complexity-to-increase-maintainability/

            您要求他们自己编写代码并检查工具如何进行重构。 除此之外,您可以在 eclipse 中编写代码,并且有可用的选项可以为您进行重构...

            【讨论】:

              【解决方案9】:

              这有点过时了(2003 年),但 IBM 在 http://www.ibm.com/developerworks/library/os-ecref/ 有几个重构示例(在 Eclipse 中有效[编辑?])

              【讨论】:

                猜你喜欢
                • 2010-10-04
                • 1970-01-01
                • 2019-11-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-17
                • 2021-10-18
                相关资源
                最近更新 更多