C#模式,用于将接口方法聚合为一个通用方法

时间:2015-02-22 23:55:57

标签: c# generics design-patterns reflection

我正在寻找一种模式来将接口方法聚合成一个通用方法。

最好举例说明我正在做的事情

考虑到我有一个包含40多个方法的接口,这些方法具有不同的职责,但除了函数名称和参数之外,这些方法的实现是相同的。

interface MultiMethod{
   public TypeA A (p1,p2);
   public TypeA B (p1);
   public TypeC C (p5,p3,p2);
   .
   .
   .
}

实施类

class MultiMethodeService : MultiMethod

在MultiMethodeService中我需要实现所有的Interface方法,但方法的实现并没有真正的不同。

像:

public TypeA A (p1,p2){
   proxy.call("remoteA").params(p1,p2);
}
public TypeB B (p1){
   proxy.call("remoteB").params(p1);
}

我想用一个使用反射的通用方法替换方法的实现。

泛型方法派生

  • 参数构成MultiMethod界面
  • MultiMethode接口中的方法名称,用于调用相等的代理调用

对我而言,很清楚如何实现泛型方法,但是当我有一个泛型方法也具有相同的语义(如没有泛型实现)时,它是如何可能的。更深层次意义代码complition(intellisense)应该适用于泛型实现等于OOP实现。 我之后想要使用MultiMethodService的服务对象,如:

var service = new MultiMethodService()
service.A(p1,p2)

一些天真的想法是实现枚举{“A”,“B”}

service.callGeneric(enum.A, p1,p2);
service.callGeneric(enum.B, p1); 

这不是很好。

为什么你要实现这个而不是直接的OOP解决方案?

  • 一次又一次地防止实施相同的方法,只需通过界面反射推断出一些变化
  • 干,不要自己收获。如果接口更改或参数类型,只重构这些但不是整个远程调用(接口实现)

如果您能提供任何模式或想法,我们非常感谢您的帮助。

offtopic 需要更多解释?假设我在c#中有这个javascript(typescript)interface,它表示c#的typescript服务。另外,我有c# classes反映了javascript类。现在我有一种机制可以从C#调用javascript来计算结果。 see here。这是在接口方法中实现的。这重复了46次,如果有什么变化,我必须重构一些实现。如何通过使用通用的东西来防止重新实现接口方法。有可能使用像service.getSyntacticDiagnostics(...)这样的服务,我可以用它来改写,代码完成(intellisense)应该与OOP样式代码同等地工作。

0 个答案:

没有答案