Skip to content

Instantly share code, notes, and snippets.

@IlyaLavrov97
Last active November 21, 2018 10:23
Show Gist options
  • Save IlyaLavrov97/f178ef2318952f1a9ca476e2c5bacea0 to your computer and use it in GitHub Desktop.
Save IlyaLavrov97/f178ef2318952f1a9ca476e2c5bacea0 to your computer and use it in GitHub Desktop.
//1) Вынести функцию Transfer в класс Account и переименовать
//2) Сделать проверку на достаточное кол-во средств у отправляющего аккаунта
//3) Прикрутить уведомления пользователям о переводе средств
public class Account
{
public double Balance { get; set; }
public bool TryTransferTo(Account toAccount, double amount)
{
if(Balance < amount)
{
// Notify about balance flaw
return false;
}
else
{
Balance -= amount;
toAccount.Balance += amount;
// Notify about balance transfer
return true;
}
}
}
//Если делать все правильно с MVVM:
//1) Необходимо создать сервис AccountsService. В нем будет ссылка на REST API Service, который имеет биндинг запросов к серверу.
//2) Обернуть его в интерфейс IAccountService.
//3) Зарегистрировать в IoC. Если брать популярные MVVM фрейворки IoC уже встроенный.
//4) Создать и реализовать метод Transfer как показанно ниже.
//5) Зарезолвить IAccountService в AccountsVM и вызвать метод Transfer в необходимом месте.
public class AccountsService : IAccountsService
{
private IRESTService _restService;
public AccountsService(IRESTService restService)
{
_restService = restService;
}
public async Task<bool> Transfer(Account toAccount, Account fromAccount, double amount)
{
if(fromAccount.Balance < amount)
{
return false;
}
else
{
ServiceResult result = await _restService.Transfer(new TransferParam
{
FromId = fromAccount.Id,
ToId = toAccount.Id,
Amount = amount
});
if(!result.IsError)
{
fromAccount.Balance -= amount;
toAccount.Balance += amount;
return true;
}
else
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment