Нехай, необхідно реалізувати функціонал зняття готівки із рахунку. Наївна реалізація може мати такий вигляд:
public class BankAccount
{
public decimal Balance { get; private set; }
public bool Withdraw(decimal amount)
{
if (amount < 0)
{
throw new ArgumentOutOfRangeException(nameof(amount));
}
if (IsAccountFrozen())
{
return false;
}
if (Balance - amount >= 0)
{
Balance -= amount;
return true;
}
return false;
}
}
public class Result
{
public bool IsSuccessful { get; private set; }
public string Error { get; private set; }
public static Result Success()
{
return new Result
{
IsSuccessful = true,
Error = "",
};
}
public static Result Failure(string error)
{
return new Result
{
IsSuccessful = false,
Error = error,
};
}
}
public class BankAccount
{
public decimal Balance { get; private set; }
public Result Withdraw(decimal amount)
{
if (amount < 0)
{
return Result.Failure("Amount can not be less than zeno");
}
if (IsAccountFrozen())
{
return Result.Failure("Account is frozen");
}
if (Balance - amount >= 0)
{
Balance -= amount;
return Result.Success();
}
return Result.Failure("Account has insufficient funds");
}
}