最初にここで短い答えを出します。それについてブログ記事を書きます。アイデアをありがとう!
したがって、これがあると仮定しましょう:
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 を削除すると、クラスの分割が完了します。これで、インターフェイスを抽出し、可能な場合は基本型を使用し、それ以外の場合は整理することができます。