public Result <Error> ChargeMoneyWithResultsAndRefactoring(int id, decimal amount) { IPersonRepository repository = null; IBankAccount bankaccount = null; INotifier notifier = null; return(repository.FindWithResult(id) .Bind(person => bankaccount.SearchAccountSummaryWithResult(person) .Bind(accountsummary => IsThereEnoughMoney(accountsummary, amount)) .Bind(() => bankaccount.ChargeWithResult(person, amount)) .Bind(transaction => notifier.NotifyWithResult(transaction, person)) )); }
public Result <Error> ChargeMoneyWithResults(int id, decimal amount) { IPersonRepository repository = null; IBankAccount bankaccount = null; INotifier notifier = null; return(_repository.FindWithResult(id) .OnSuccess(person => _bankaccount.SearchAccountSummaryWithResult(person) .OnSuccess(accountsummary => { if (accountsummary.Total > amount) { return _bankaccount.ChargeWithResult(person, amount) .OnSuccess(transaction => notifier.Notify(transaction, person)); } else { return Failure(new Error()); } }))); }