假设您决定将 Stack Overflow 的名称更改为 Frack Overflow。
现在,在您的代码中,您已经有几十个对象、变量和选择器,它们的名称有些变体“堆栈”。您现在希望将它们替换为“Frack”。
所以我的问题是,你会选择通过正则表达式过滤器运行整个代码库并更改所有这些名称吗?或者你会让他们这样吗?
假设您决定将 Stack Overflow 的名称更改为 Frack Overflow。
现在,在您的代码中,您已经有几十个对象、变量和选择器,它们的名称有些变体“堆栈”。您现在希望将它们替换为“Frack”。
所以我的问题是,你会选择通过正则表达式过滤器运行整个代码库并更改所有这些名称吗?或者你会让他们这样吗?
我会使用一个好的 IDE 的“重命名”功能来为我做这件事。
这取决于,真的。
在像 C++ 这样的语言中,您可以避免这种情况,因为编译器会立即让您知道是否会出现问题。但是,其他不那么挑剔的语言将允许您引用不存在的变量,并且发生的最糟糕的情况是以针对空引用引发异常的形式拍打手腕。
有一次我在一个 flex 项目上工作,其中代码库真的很乱,我们决定检查代码并稍微美化它以符合 Adobe AS3 编码标准。由于我是该项目的新手,我没有意识到某些类中的变量名实际上引用了休眠(为后端服务器运行 java webapp)用于创建映射的持久对象。因此,重命名这些变量会导致整个 flex 前端行为异常,即使我们使用 IDE 中的“正确”重构工具进行了重命名。
但实际上,我会说在门口检查你的强迫症,一次做一点改变。每当您在一个大型项目中更改数十个文件时,都有可能破坏它的稳定性,在这种情况下,这种风险带来的好处并没有得到回报。
我首先会问自己这个问题,为什么?这是一天结束时的风险/回报判断,只有你才能做出。
出于文体原因,我非常不愿意这样做,但对于类重构,它可能是合法的。
好吧,不一定是灾难,但它肯定会在大型代码库上造成一些麻烦。这就是我讨厌匈牙利符号的原因:如果你碰巧改变了它的类型,它会让你改变所有的变量名。
如果您的解决方案中有名称引用某个客户实现的对象、成员和字段,我会努力重构这些以使用更通用的名称,我会让Resharper进行重命名,而不是一些通用的文本搜索和替换工具。
只需使用重构工具,例如 JetBrains 的 Resharper 或 CodeRush 和 Refactor!由 DevExpress 提供。它们会自动更改整个代码库中变量的所有引用,并且可以做更多事情。我相信重构!甚至包含在 Visual Studio 的 VB 版本中。我使用 Resharper,没有它我拒绝开发。
如果我使用源代码版本控制系统(如 svn、git、bazar、mercurial 等),我不会害怕重构我的代码。
使用某种“查找全部替换”或重构某些 IDE,编译(如果它不是动态语言)并运行测试(如果有)。
如果出现严重错误,您始终可以使用源代码控制系统还原您的代码。
重命名可能是最常见的重构。建议您随时重构您的代码,因为这样可以让您在首次编写应用程序时不必对名称、代码位置等做出永久性决定。如果您不熟悉这个想法,我建议您从Wikipedia 页面开始,然后深入Martin Fowler 的网站。
但是,如果您需要编写自己的正则表达式来重命名事物,那么恕我直言,您可以使用一些更好的工具。不要浪费时间重新发明轮子——然后修理你的新轮子意外损坏的东西。如果您可以选择,请使用现有工具(IDE 或其他工具)来完成这项繁琐的工作。
即使您有“数十个”要重命名的东西,我认为您最好手动一一找到它们,然后使用自动重命名来修复整个代码中的所有实例。
我认为,您需要有充分的理由这样做。当我在大型代码库中进行具有大量潜在副作用的更改时,我通常会寻找一种方法让编译器在我错过的地方失败。而且,如果可能的话,我倾向于分阶段进行,以尽量减少休息时间。
不过,我不会为了重命名而重命名。