Злоупотребление закрытием? Нарушение различных принципов? Или хорошо?

Изменить: исправлено несколько проблем с синтаксисом и непротиворечивостью, чтобы сделать код более очевидным и близким к тому, что я на самом деле делаю.

У меня есть код, который выглядит примерно так:

SomeClass someClass;
var finalResult = 
  DoSomething(() => 
  {
    var result = SomeThingHappensHere();
    someClass = result.Data;
    return result;
  })
  .DoSomething(() => return SomeOtherThingHappensHere(someClass))
  .DoSomething(() => return AndYetAnotherThing())
  .DoSomething(() => return AndOneMoreThing(someClass))
  .Result;

HandleTheFinalResultHere(finalResult);

где метод DoSomething является методом расширения, и он ожидает, что ему будет передан Func. Итак, каждый из вызовов метода в каждом из лямбда DoSomething => возвращает тип результата

, это похоже на монаду Maybe . За исключением того, что вместо проверки на нули, я проверяю статус класса Result и либо вызываю Func, который был передан в DoSomething, либо возвращаю предыдущий результат без вызова Func

, проблема, с которой я сталкиваюсь, заключается в том, что я хочу иметь такой вид композиции в моем коде, но мне также нужно иметь возможность передавать данные из одного из результатов составленного вызова в вызов другого, как вы можете видеть с помощью переменной someClass .

Мой вопрос не в том, правильно это или нет технически ... я знаю, что это работает, потому что я сейчас это делаю. Мой вопрос заключается в том, является ли это злоупотреблением закрытием, разделением команд и запросов или любыми другими принципами ... а затем спросить, какие шаблоны лучше подходят для обработки этой ситуации, потому что я совершенно уверен, что я застрял в режиме "новый блестящий молоток" с этим типом кода прямо сейчас.

8
задан Derick Bailey 5 October 2010 в 01:14
поделиться