//VIOLAÇAO DO OCP OCORRE NO MOMENTO DA MUDANÇA DE REQUISITO

        //NOVO REQUISITO: ANTI-FRAUDE

        //REQUISITOS V2:
        //Validar nome está preenchido
        //Vaidar numero cartao está preenchido
        //Validar codigo de segurança está preenchido
        //Valor da compra ultrapassa R$ 1.000 deve ir pra analise de risco
        //Verificar nome do cliente no SERASA
        public bool ProcessarPagamentoV2(Pessoa cliente, CartaoCredito dadosPagamento, decimal valorCompra)
        {
            if (string.IsNullOrEmpty(dadosPagamento.NumeroCartao))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(dadosPagamento.CodigoSeguranca))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(dadosPagamento.NomeCartao))
            {
                return(false);
            }

            //A Maioria das pessoas continua a adicionar IFs no código,
            //tornando o método cada vez mais complexo e dificil de manter

            if (!SERASA.ClienteTemNomeSujo(cliente.Nome))
            {
                return(false);
            }

            if (valorCompra > 1000)
            {
                //Faz processamento manual da operação para verificar possíveis fraudes.
            }

            //Com o passar do tempo e o aumento do número de regras esse método vira uma BOMBA relógio!!!

            return(true);
        }
예제 #2
0
        //O objetivo da implementação é deixar esse método selado!
        //toda vez que houver uma mudança na regra de negócio, ninguém precisa mexer nele...
        //É preciso apenas estender a implementação de validadores
        public bool ProcessarPagamento(Pessoa cliente, CartaoCredito dadosPagamento, decimal valorCompra)
        {
            foreach (var item in Validadores)
            {
                if (!item.Validate(cliente, dadosPagamento, valorCompra))
                {
                    return(false);
                }
            }

            return(true);
        }
        //REQUISITOS:
        //Validar nome está preenchido
        //Vaidar numero cartao está preenchido
        //Validar codigo de segurança está preenchido
        public bool ProcessarPagamento(Pessoa cliente, CartaoCredito dadosPagamento, decimal valorCompra)
        {
            if (string.IsNullOrEmpty(dadosPagamento.NumeroCartao))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(dadosPagamento.CodigoSeguranca))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(dadosPagamento.NomeCartao))
            {
                return(false);
            }

            return(true);
        }