Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. public bool Transfer(Account from, Account to, double amount)
  2. {
  3. from.Balance = from.Balance - amount;
  4. to.Balance = from.Balance + amount;
  5. return true;
  6. }
  7.  
  8. // 1. Нет смысла что-то возвращать из этого метода.
  9. // 2. Надо проверить на null ссылки
  10. // 3. Надо проверить amount на положительность. Это моё предположение насчёт бизнес правил здесь.
  11. Так же, для этого можно заморочиться и завести класс AmountToTransfer и в него запихнуть эту проверку, но не факт, что этим стоит увлекаться здесь.
  12. // 4. Я не уверен, что в бизнесе всё так просто, что списание и пополнение, это просто изменение баланса. Тут плохая инкапсуляция. Лучше методы сделать для такого. После этого проверку amount на положительность можно убрать из этого метода.
  13. // 5. Списание и пополнение нужно делать в рамках одной транзакции. Это, может быть, и неявно тут уже есть, но можно и явно попробовать. Напишу псевдокод здесь.
  14.  
  15. public void Transfer(Account from, Account to, double amount)
  16. {
  17. if(from == null)
  18. {
  19. throw new AccountIsNotProvidedException("from");
  20. }
  21.  
  22. if(to == null)
  23. {
  24. throw new AccountIsNotProvidedException("to");
  25. }
  26.  
  27. if(amount <= 0)
  28. {
  29. throw new CanNotTransferNegativeAmountException(amount);
  30. }
  31.  
  32. using(var transaction = TransactionManager.StartTransaction())
  33. {
  34. from.WriteOfFor(to, amount);
  35. to.TopUp(from, amount);
  36. }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement