2011-12-06 14 views
2

私のコードでは、膨大な数のメソッドに対して同じリファクタリングタスクを繰り返さなければならないという状況があります。 たとえば、100個のメソッドを持つインターフェイスを想像してみましょう。各メソッドには、1つ以上のパラメータと戻り値があります。これらのメソッドのそれぞれについて、実装にジャンプして戻り値の型を変更し、インターフェイスメソッドの呼び出し元に対して古い戻り値を新しい型に変換するコード行を追加する必要があります。複雑なリファクタリングタスクの自動化

このようなリファクタリングを迅速に自動化する方法はありますか? 私はそれを行うためのカスタムスクリプトを書こうと思っていましたが、知的なスクリプトを書くのは、それを実際に行うよりも時間がかかります。

このようなタスクをサポートするツールは、多くの時間を節約できます。

+4

私は100個のメソッドとのインタフェースを想像するとき、私は痛みを感じます。 –

+1

これは単なる例ですが、WCFサービス契約を考えてみましょう...それほど想像を絶するものではありません。 – Alexander

答えて

0

ResharperCodeRush両方のタスクのこの種のを助けることができる機能を持っています。

Resharperのchange signatureの機能がおそらく最も近いでしょう。

+0

NoSee ReSharoperもCodeRushも、ユーザーの介入なしにこのようなことを完全に自動化できます。それでも各メソッドに対して手動で行う必要があります。 – Alexander

+0

ああ申し訳ありませんが、私は質問を誤解しました。それをマクロと組み合わせることができますか?メソッド定義に移動する>署名を変更する>メソッドの最後に移動> paste> repeat? –

+0

^^それは私が必要とするものです。しかし、私は偉大な費用なしでこれを行う方法を知らない – Alexander

0

あなたが持っているクラスから新しいインターフェイスを生成して、必要のないインターフェイスを削除することはできません。それが単純ならば!

+0

通常、あなたはこれを行うでしょう。しかし、ここでコードの追加ビュー行を追加する必要がある場合は、そこのいくつかを削除します...? – Alexander

1

それは良い質問ですが、あなたがそれを掲示するので、それが要した時間(あなたが投稿する前に答えを探しに費やす時間を言及していない)には、手動で変更を完了している可能性があります。私が知っている

は、私が知っている、それは全く不満足だが、あなたは調停の一形態としてそれを考えると、年に一度だけこの操作を行う場合、それは悪くはないのです。

+0

手作業で3日間かかりました。サルの3日間。それはお金の無駄です。 – Alexander

+0

実際、あなたが猿を持っていない限り...とにかく、あなたがしなければならない実際の変更を見ることなく、具体的な助言を与えるのは難しいです。恐らく、いくつかの正規表現find-n-replaceが作業の大半を行っていて、数時間の手作業を残していたでしょう。あまりにも曖昧です。 – zmbq

1

と100個の方法のインターフェイスがある場合、私は別のポスターに同意します:それだけでは苦痛に思えるかもしれませんが、作業には限界があり、すぐにやり遂げることができます。

この問題が繰り返し発生するか、非常に大きなコードベース(このタスクを実行する多数のインターフェイス)がある場合は、自動化された変更を実装するためのツール:program transformation engineが必要です。このようなツールは、ソースコードを解析し、プログラム表現(抽象構文木)を構築し、手続き型インタフェースおよび/またはソースからソースへの変換パターンを通じてツリー上に「スクリプト化」操作を適用することを可能にする。我々のDMS Software Reengineering Toolkit

は、プログラム変換システムです。 C#コードへの適用を可能にするためにC# Front Endがあります。このようなツールを複雑なタスク用に構成することは数時間ではないので、「小規模」の変更には役立ちません。大規模な変更の場合、そのようなツールは、手作業では簡単ではないことを可能にする可能性があります。

+0

これは良いですね。 – Alexander

0

変化戻り型は:...戻り型を変更することにより、それは標準タイプ(...)ない設けられており、変換器はにTypeConverterによって実現することができます。私が行うには、このような退屈なタスクを持っている場合は

、私は多くの場合、VS2010を切り替えると、正規表現の検索が可能と置換ツールを使用します。あなたの例では、おそらく 'return xxx; 'var yyy = convert(xxx);によってreturn yyy; '

(例えばエディタメモ帳++(無料)が出回っプロジェクト(注意して使用)のすべてを変更するにはかなりのpossiblitiesを提供しています)

関連する問題