3

私はいくつかのレガシーコードを使用していて、この既存のインターフェイスを持っています:

public interface IProcess
{
    IDTO Process(IDTO request);
}

次に、インターフェイスを実装するオブジェクト(そのうち17個)を返す巨大なswitchステートメントを備えたファクトリがあります。作成されたオブジェクトは、次のようにプロセスを呼び出します。

return xProcess.Process(requestDTO);

私の問題は、次のような2番目のパラメーターを渡すために、これらのいくつかを変更する必要があることです。

xProcess.Process(requestDTO, Id);

私はこれを達成するためのエレガントな方法を探しています。

インターフェイスを次のような抽象クラスにしてみました。

public abstract class IProcess
{

    public virtual IDTO Process(IDTO request)
    {
       return null;
    }

    public virtual IDTO Process(IDTO request, int Id)
    {
        return null;
    }
}

これにより、作成されたクラスのProcessメソッドをオーバーライドできますが、IProcessが別のインターフェイスに継承され、明らかに壊れているという問題があります。

従来のプラットフォームは巨大であり、テストカバレッジはあまり良くないので、残りのコードベースへの影響を最小限に抑えた優れたエレガントなソリューションを探しています。おそらく、私が見落としているパターンがありますか?

誰か助けてもらえますか?(例は素晴らしいでしょう)

ありがとう

デビッド

4

1 に答える 1

7

次のように、既存のインターフェイスを継承する新しいインターフェイスを作成することはできません

public interface IProcess2 : IProcess
{
    IDTO Process(IDTO request, int Id);
}

次に、クラスを変更して、新しいクラスから継承します。

これにより、既存のIProcessのユーザーが破損するのを防ぐことができます。

于 2012-11-07T11:58:27.210 に答える