1

私は最初の大規模なリファクタリングに着手したばかりで、(残念ながら大きな) クラスを 2 つに分割する必要があり、それらはインターフェイスを介してのみ通信します。(私のプレゼンターはコントローラーであることが判明したため、アプリ ロジックから GUI ロジックを分離する必要があります)。VisualStudio 2008 と Resharper で C# を使用する場合、これを実現する最も簡単な方法は何ですか?

私がしようとしているのは、a)新しいクラスのメンバーを収集し、「新しいクラスを抽出する」 b)結果の混乱をクリーンアップする c)「インターフェイスを抽出する」 d)クラスへの参照を追跡し、それらをインターフェイス参照に変換することです

しかし、私はこれまでにこれを行ったことがなく、すべてをバラバラにする前に、誰かが何か良いヒントや落とし穴を知っているかどうか疑問に思っています...ありがとう!

4

6 に答える 6

5

旧式と呼んでください。個人的には、あなたが説明した自動化機能は、技術的なタスク (名前の変更など) の場合にのみ使用します。

インターフェイスの抽出など、他のすべてのリファクタリングについては、手動で行うことを好みます。さらに多くのリファクタリングを行うことができ、通常はコードがきれいになることがわかります。

于 2008-10-23T11:51:20.303 に答える
3

赤ちゃんのステップ。

ステップ 1: Resharper の優れたリファクタリングを使用して小さな変更を加えます。
ステップ 2: コードが引き続き機能することを確認するためのテスト (できれば単体テスト)
ステップ 3: ソース管理へのコミット

この3ステップを何度も繰り返します。

これらの「一度に大きなステップでなければならない」リファクタリングのいずれかを行っている場合、これは機能しない可能性があります。その場合は、大きな一歩に踏み出す前に、できるだけ多くの小さなリファクタリングを行ってください。

于 2008-10-23T11:50:19.230 に答える
1

重要なアドバイスが 1 つだけあります。何も失うことなく、リファクタリングを開始する前の状態に戻せることを絶対に確認してください。次に、飛び込んで行きます。途中でやめてまたやり直さなければならなくなるかもしれませんが、それを恐れる必要はありません (私のアドバイスを 1 つ心に留めている限り)。あなたはそれをすることで多くを学ぶでしょう。

于 2008-10-23T18:50:25.230 に答える
0

私は VisualStudio を使用したことがありませんが、Eclipse の自動リファクタリングは非常に信頼性が高く、少なくとも私が同じ仕事をしているのと同じくらい信頼性が高いと感じています。

于 2008-10-23T18:48:27.967 に答える
0

最初にここで短い答えを出します。それについてブログ記事を書きます。アイデアをありがとう!

したがって、これがあると仮定しましょう:

class PresenterAndController
  {
    public void Control()
    {
      Present();
    }

    public void Present()
    {
      // present something
    }
  }

最初に、すべての直接メンバーの使用を間接に変換する必要があります。つまり、それらをフィールドで修飾します。これを行うには、スーパークラスの抽出リファクタリングを使用して、Presenter 部分をスーパークラスに抽出します。

  internal class Presenter
  {
    public void Present()
    {
      // present something
    }
  }

  class PresenterAndController : Presenter
  {
    public void Control()
    {
      Present();
    }
  }

委任する PresenterAndController にフィールドを作成し、Generate (Alt-Ins) を使用して委任メンバーを作成します。それらは同じであるため、たまたま基本メソッドを非表示にします。

  internal class Presenter
  {
    public void Present()
    {
      // present something
    }
  }

  class PresenterAndController : Presenter
  {
    private Presenter myPresenter;

    public void Present() // hides base method
    {
      myPresenter.Present();
    }

    public void Control()
    {
      Present(); // it now references method from this type
    }
  }

継承リストから Presenter を削除すると、クラスの分割が完了します。これで、インターフェイスを抽出し、可能な場合は基本型を使用し、それ以外の場合は整理することができます。

于 2008-10-23T13:06:18.250 に答える