65.9K
CodeProject 正在变化。 阅读更多。
Home

Fowler 重构示例

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.92/5 (8投票s)

2003年5月20日

CPOL

2分钟阅读

viewsIcon

77294

downloadIcon

1347

Martin Fowler 编写的《重构 - 改善既有代码的设计》一书第一章“起点”示例的 C# 翻译。

引言

Fowler 的《重构:改善既有代码的设计》(Addison Wesley 2000)第一章提供了一个扩展的重构示例,涵盖了该书的第 1 页到第 52 页。该示例演示了重构过程和在重构代码过程中通常会遇到的一些特定重构。该示例在书中是用 Java 编写的。本项目及其相关项目将该示例翻译成 C#。

示例的翻译方式

C# 示例项目非常接近地遵循了 Fowler 的代码。对 Fowler 代码的更改和补充如下:

  • 我使用 C# 属性代替了 Fowler 的公共访问器方法(getter/setter 方法)。
  • Fowler 将他的价格代码声明为 Java 常量。我将它们声明为 C# enum (参见 Movie 类)。
  • 示例中添加了单元测试,在一个名为Tests.cs的类中。所有测试类和方法都是按照 NUnit v. 2.0 的规范创建的。

使用示例

源代码文件包含一个名为 "StartingPoint" 的 VS.NET 项目。该项目代表项目的初始状态,在进行任何重构之前。它出现在该书的第 2 - 5 页。

使用此代码作为您的起点,逐步完成该章节。当 Fowler 在书中执行每个重构时,请跟随,在 C# 项目上执行相同的重构。此过程将帮助您更好地理解 Fowler 所称的“重构的节奏”,以及该示例中演示的特定重构。

随时进行测试

单元测试是重构的关键要素。一套好的单元测试允许您进行一个小改动,然后进行测试。再进行一个小改动,然后再次测试。一旦编写了测试,使用 NUnit 或 csUnit 等工具进行单元测试几乎是自动且即时的。

Fowler 在《重构》第一章中提到了他的测试,但他没有展示它们。因此,我在 C# 项目中添加了一套简单的单元测试,以测试该示例的基本要素。我并没有声称这些测试是完整的;仅仅是足够的。它们是为 NUnit 2.0 编写的,并且该项目包含对 NUnit 框架 DLL 的引用。

该项目要求您在计算机上安装 NUnit。可以从NUnit 网站下载 NUnit。该项目引用假设可以在其默认位置找到 DLL。如果找不到,则应删除现有引用并添加一个指向正确位置的新引用。

希望您发现该示例与我一样有用。它帮助我理解了为什么重构(和测试)是每个程序员在编写代码时都应该运用的核心纪律。

© . All rights reserved.