2012-11-07 18 views
3

我与一些旧代码工作,有这样的现有的接口:C#接口过于死板

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

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

return xProcess.Process(requestDTO); 

我的问题是,我现在需要改变其中的几个像第二个参数来传递:

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; 
    } 
} 

这使我覆盖在创建的类的加工方法,但是我有的iProcess由另一个接口,这是现在继承的一个问题明显破碎。

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

任何人都可以帮忙吗? (例子将是巨大的)

感谢

大卫

回答

7

您不能创建一个新的接口,从现有的继承,像

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

然后改变你的类从继承新的一个。

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

+0

谢谢。我确实玩过这个主意,但工厂返回IProcess,并且出现错误,提示我无法将IProcess转换为IProcess2。我错过了什么吗? – davy

+1

是的,工厂也需要改变:) –

+0

@Justin - 绝对:),刚刚添加评论说这就是我需要做的。非常好,非常感谢。 – davy