2012-03-22 66 views
0

我有幾種方法返回類型IEnumerable<T>。這些方法DomainService類的一部分,並且在客戶端上他們與InvokeOperation<T>DRY(重構)使用回調的代碼?

public InvokeOperation<IEnumerable<T>> MethodA(string prm, Action<InvokeOperation<IEnumerable<T>>> 

public InvokeOperation<IEnumerable<T>> MethodB(Action<InvokeOperation<IEnumerable<T>>> 
返回類型產生

調用這些方法時,在回調的代碼基本上是相同的

void SomeMethodA(string someString, Action<ResultsArgs<string>> operationCompleted) 
{ 
    MyContext.MethodA(someString, c => 
     { 
      // same code (operationCompleted parameter is used) 
     }, null); 
} 

void SomeMethodA(Action<ResultsArgs<string>> operationCompleted) 
{ 
    MyContext.MethodB(c => 
     { 
      // same code (operationCompleted parameter is used) 
     }, null); 
} 

如何我可以重構這個,所以沒有重複的代碼?

回答

1

做,需要一個C和operationCompleted的方法....

然後

MyContext.MethodA(someString, c => MyShinyNewMethod(c, operationCompleted), null); 
0

我想你可以只提取採取InvokeOperation<IEnumerable<T>>Action<ResultsArgs<string>>作爲參數的方法。然後調用c => { }中的方法。

void SomeMethodA(string someString, Action<ResultsArgs<string>> operationCompleted) 
{ 
    MyContext.MethodA(someString, c => 
     { 
      NewMethod(c, operationCompleted); 
     }, null); 
} 

void SomeMethodA(string someString, Action<ResultsArgs<string>> operationCompleted) 
{ 
    MyContext.MethodB(c => 
     { 
      NewMethod(c, operationCompleted); 
     }, null); 
}