СУХОЙ (рефакторинг) этот код, который использует обратные вызовы? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть несколько методов, которые имеют тип возврата IEnumerable<T>. Эти методы являются частью класса DomainService, и на клиенте они генерируются с типом возврата InvokeOperation<T>

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

Как я могу реорганизовать это, чтобы не было повторяющегося кода?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

сделать метод, который принимает c и operationCompleted ....

тогда

  MyContext.MethodA(someString, c => MyShinyNewMethod(c, operationCompleted), null);
0 голосов
/ 22 марта 2012

Я думаю, вы можете просто извлечь метод, который принимает 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);
}
...