Изменить: исправлено несколько проблем с синтаксисом и непротиворечивостью, чтобы сделать код более очевидным и близким к тому, что я на самом деле делаю.
У меня есть код, который выглядит примерно так:
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
.
Мой вопрос не в том, правильно это или нет технически ... я знаю, что это работает, потому что я сейчас это делаю. Мой вопрос заключается в том, является ли это злоупотреблением закрытием, разделением команд и запросов или любыми другими принципами ... а затем спросить, какие шаблоны лучше подходят для обработки этой ситуации, потому что я совершенно уверен, что я застрял в режиме "новый блестящий молоток" с этим типом кода прямо сейчас.