自动化复杂的重构任务

本文关键字:任务 重构 复杂 自动化 | 更新日期: 2023-09-27 18:16:50

我遇到的情况是,我的代码中有大量的方法必须重复执行相同的重构任务。例如,假设一个接口有100个方法,每个方法都有一个或多个参数以及一个返回值。对于这些方法,我需要跳转到实现更改返回类型,并添加一行代码,将旧的返回值转换为接口方法调用者的新类型。

有什么方法可以快速自动化这样的重构吗?我甚至想过写一个自定义脚本来做这件事,但是写一个智能脚本大约比手工做要花更长的时间。

支持这种任务的工具可以节省很多时间。

自动化复杂的重构任务

这是一个很好的问题,但从你发布它以来所花费的时间来看(更不用说你在发布之前搜索答案所花费的时间),你本可以手动完成更改。

我知道,我知道,这完全不令人满意,但如果你把它看作一种调解形式,每年只做一次,那就没那么糟糕了。

如果你的问题是一个接口有100个方法,那么我同意另一个海报:只是做它可能看起来很痛苦,但它是有限的努力,你可以很快完成。

如果您反复遇到这个问题,或者您有非常大的代码库(您想要执行此任务的许多接口),那么您需要的是实现自动更改的工具:程序转换引擎。这样的工具提供了解析源代码、构建程序表示(抽象语法树)的能力,并使人们能够通过过程接口和/或通过源到源转换模式在树上应用"脚本化"操作。

我们的DMS软件再造工具包就是这样一个程序转换系统。它有一个c#前端,使其应用程序支持c#代码。为复杂的任务配置这样的工具不是几个小时的事情,因此它对于"小规模"更改没有用处。对于大规模的更改,这样的工具可以使手工操作不实际的事情成为可能。

Resharper和CodeRush都有可以帮助完成这类任务的功能。

Resharper的变更签名功能可能是最接近的匹配。

难道不能从现有的类中生成一个新的接口,然后删除不需要的接口吗?如果有那么简单的话!!

改变返回类型:通过改变…返回类型,前提是它不是标准类型(…),并且转换器可以由TypeConverter实现。

当我有这样无聊的任务要做时,我经常切换VS2010并使用一个允许正则表达式搜索和替换的工具。在你的例子中,也许改变'return xxx;'由'var yyy=convert(xxx);返回多;'

(例如编辑器notepad++(免费)已经提供了相当多的可能性来更改项目中的所有内容(谨慎使用))