public IEnumerable <IEvénementMétier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
        {
            var numeroDeCompte = RecupererNumeroDeCompte();

            if (numeroDeCompte == string.Empty)
            {
                return(null);
            }

            var retrait = new RetraitRéalisé(numeroDeCompte, montantRetrait, dateRetrait);
            var montantRestantSurLeCompte = CalculerMontantRestantSurLeCompteApresRetrait(retrait);

            if (montantRestantSurLeCompte >= 0)
            {
                return(new[] { (IEvénementMétier)retrait });
            }

            if (Math.Abs(montantRestantSurLeCompte) > RecupererAutorisationDeCredit())
            {
                throw new RetraitNonAutorisé();
            }

            var balanceNegative = new BalanceNégativeDétectée(numeroDeCompte, new Montant(Math.Abs(montantRestantSurLeCompte)), dateRetrait);

            return(new[] { (IEvénementMétier)retrait, balanceNegative });
        }
        public IEnumerable<IEvénementMétier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
        {
            var numeroDeCompte = RecupererNumeroDeCompte();
            if (numeroDeCompte == string.Empty)
            {
                return null;
            }

            var retrait = new RetraitRéalisé(numeroDeCompte, montantRetrait, dateRetrait);
            var montantRestantSurLeCompte = CalculerMontantRestantSurLeCompteApresRetrait(retrait);

            if (montantRestantSurLeCompte >= 0)
            {
                return new[] { (IEvénementMétier)retrait };
            }

            if (Math.Abs(montantRestantSurLeCompte) > RecupererAutorisationDeCredit())
            {
                throw new RetraitNonAutorisé();
            }

            var balanceNegative = new BalanceNégativeDétectée(numeroDeCompte, new Montant(Math.Abs(montantRestantSurLeCompte)), dateRetrait);
            return new[] { (IEvénementMétier)retrait, balanceNegative };
        }