0

コンストラクターにパラメーターが多すぎる次のクラスがあり、すべてのパラメーターをカプセル化するオブジェクトを 1 つだけ受け取るようにクラスをリファクタリングしたいと考えています。

public class MyClass
{
    public MyClass(
       string param1,
       string param2,
       string param3,
       string param4,
       string param5)
    {
       ...
    }
}

Visual Studio リファクタリング ユーティリティを使用して、すべてのコンストラクター パラメーターを新しいクラスにカプセル化することはできますか?

public class MyClass
{
    public MyClass(MyClassParameters parameters)
    {
       ...
    }
}

public class MyClassParameters
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
    public string Param3 { get; set; }
    public string Param4 { get; set; }
    public string Param5 { get; set; }
}

だから私の質問は

  • クラスへのすべての参照を手動で更新する必要がないように、Visual Studio を使用してこれを行うことはできますMyClassか?
  • Resharperなど、この機能をサポートする他のリファクタリング ツールはありますか?

単体テスト スイートでこのクラスへの参照が何千もあるため、これは大変な作業です。

4

3 に答える 3

4

組み込みのC# リファクタリングオプションには、 「パラメーター オブジェクトの導入」リファクタリングは含まれていません。

ResharperRefactor Pro (どちらも商用) にはそれがあります。

于 2012-03-08T16:38:56.387 に答える
3

ReSharperをお持ちですか?
ReSharper では、コンストラクターにカーソルを設定し、Ctrl+RCtrl+Rを押してExtract Class From Parameters...を選択します。

于 2012-03-08T16:39:36.263 に答える
0

クラスがすでにあらゆる場所で使用されている場合、できることは、MyParameter パラメーターを受け取る別のコンストラクターを作成し、古い機能をコピーして (各パラメーターへの参照を MyParameter プロパティ/フィールドに更新する)、古いコンストラクターの読み取り:

public MyClass(
   string param1,
   string param2,
   string param3,
   string param4,
   string param5) : this(new MyParameter(param1, param2...))
{
}

最も美しい解決策ではありませんが、Oded が言及しているように、コンストラクターのパラメーターをリファクタリングする "組み込み" の方法はありません。

于 2012-03-08T16:40:38.070 に答える