public MakePaymentResult MakePayment(MakePaymentRequest request) { var datastore = _dataStoreFactory.Create(_appConfig.GetKeyValue("DataStoreType")); var account = datastore.GetAccount(request.DebtorAccountNumber); var result = new MakePaymentResult(); switch (request.PaymentScheme) { case PaymentScheme.Bacs: result.Success = _accountValidatorBacs.Validate(request, account); break; case PaymentScheme.FasterPayments: result.Success = _accountValidatorFasterPayments.Validate(request, account); break; case PaymentScheme.Chaps: result.Success = _accountValidatorChaps.Validate(request, account); break; } if (result.Success) { account.Balance -= request.Amount; datastore.UpdateAccount(account); } return(result); }