C#界面太僵硬了

dav*_*avy 3 c# oop design-patterns interface

我正在使用一些遗留代码并拥有此现有界面:

public interface IProcess
{
    IDTO Process(IDTO request);
}
Run Code Online (Sandbox Code Playgroud)

然后有一个工厂有一个巨大的switch语句返回实现接口的对象(其中17个).创建的对象然后调用进程,如:

return xProcess.Process(requestDTO);
Run Code Online (Sandbox Code Playgroud)

我的问题是我现在需要更改其中的一些以传递第二个参数,如:

xProcess.Process(requestDTO, Id);
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种优雅的方式来实现这一目标.

我试过让接口成为一个抽象类,如:

public abstract class IProcess
{

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

    public virtual IDTO Process(IDTO request, int Id)
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许我在创建的类中重写Process方法,但是我有一个问题,即IProcess由另一个接口继承,现在显然已经破坏了.

传统平台非常庞大,测试覆盖率也不高,所以我正在寻找一个优秀的解决方案,对代码库的其余部分影响最小.也许,有一种我忽略的模式?

有人可以帮忙吗?(例子很棒)

谢谢

大卫

Jus*_*vey 7

你能不能创建一个继承现有界面的新界面,比如

public interface IProcess2 : IProcess
{
    IDTO Process(IDTO request, int Id);
}
Run Code Online (Sandbox Code Playgroud)

然后更改您的类以继承新的类.

这应该阻止现有IProcess的任何用户破坏.