C# 接口(interface)太死板

标签 c# interface design-patterns oop

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

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

然后有一个带有巨大 switch 语句的工厂返回实现该接口(interface)的对象(其中 17 个)。创建的对象然后调用过程如下:

return xProcess.Process(requestDTO);

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

xProcess.Process(requestDTO, Id);

我正在寻找一种优雅的方式来实现这一点。

我试过使接口(interface)成为一个抽象类,例如:

public abstract class IProcess
{

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

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

这允许我覆盖创建的类中的 Process 方法,但我有一个问题,即 IProcess 由另一个接口(interface)继承,现在显然已损坏。

遗留平台庞大,测试覆盖率不高,因此我正在寻找一个对其余代码库影响最小的优雅解决方案。也许,我忽略了一种模式?

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

谢谢

大卫

最佳答案

你能不能创建一个继承自现有接口(interface)的新接口(interface),比如

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

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

这应该会阻止现有 IProcess 的任何用户中断。

关于C# 接口(interface)太死板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13269222/

相关文章:

java - 如何创建一个使用来自提供者的组件的组合,而它本身应该添加到其中?

c++ - 在硬件接口(interface)之间切换的最佳设计模式

c# - ZedGraph 在 Visual Studio 2012 中不起作用

c# - C# 中有类似 Stackless Python 的东西吗?

go - 在 Golang 中无需声明结构即可从接口(interface)获取接口(interface)字段值

java - 实现特定接口(interface)的所有类的对象的集合

java - 如何指示一个类将具有特定的静态方法?

c# - 这是什么意思 ?公共(public)名称{get;放;}

c# - 命名空间中不存在 Unity 5.3.3 UI

design-patterns - 如何在Dart中实现事件系统?