public ICardOperator GetInstance(CardFlag flag) { switch (flag) { case CardFlag.Visa: return(new Visa()); case CardFlag.Master: return(new Master()); default: throw new ArgumentOutOfRangeException(nameof(flag)); } }
public void AddCredit(int userId, string cardNumber, int verificationCode, string name, CardFlag flag, decimal value) { _factory.GetInstance(flag).Debit(name, cardNumber, verificationCode, value); var wallet = GetOrCreateWallet(userId); wallet.AddCredit(value); _ctx.SaveChanges(); }