Olá Rodrigo!
Após ver o curso de design patterns quero tentar melhorar meu código. Precisava de algumas dicas para conseguir pensar orientado a objetos, se possível.
Estou desenvolvendo uma classe para aprovação de cartões de crédito. Esta classe precisará ser reutilizada em vários lugares.
A aprovação pode ser feita pela Esitef(skytef) ou pela Cielo. Então pensei que deveria criar uma interface para abstrair quem fosse ser utilizada. E tornei esta classe genérica para receber os dados do cartão para aprovação ( número do cartão, validade, cvv etc..)
public interface Pagamento<T> {
public T aprovar(T t);
}
Em seguida criei a classe da Esitef para implementar a aprovação:
public class EsitefCartao implements Pagamento<CartaoAprovacao> {
@Override
public CartaoAprovacao aprovar(CartaoAprovacao cartaoAprovacao) {
try {
validaDadosCartao(cartaoAprovacao.getCartao());
validaParametrosEsitef(cartaoAprovacao);
json.put(GSAConst.NUMBER, cartaoAprovacao.getCartao().getNumeroCartao());
//... outros campos
URL url = new URL(cartaoAprovacao.getUrl());
//Chamando a api de aprovação
JSONObject jsonObj = Autenticacao.callWebService(url, json);
cartaoAprovacao.getCartao().setCodigoAutorizacao((String) paymentJson.get(GSAConst.AUTHORIZATIONNUMBER));
return cartaoAprovacao;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Depois posso criar a classe da Cielo e implementar a aprovação. Agora na View eu chamo a aprovação:
Pagamento<CartaoAprovacao> pagamento = new EsitefCartao();
CartaoAprovacao caDados = new CartaoAprovacao(
vCartao,
pLoja.getVarcharPar(),
pSigla.getVarcharPar(),
vCartao.getQtdeParcela(),
pTipoParcelamento.getIntPar(),
administradora.getIdESitef(),
pedido.getCliente().getIdCliente(),
pUrl.getVarcharPar());
CartaoAprovacao cartaoRetorno = pagamento.aprovar(caDados);
System.out.println("Autorizaco: " + cartaoRetorno.getCartao().getCodigoAutorizacao());
Contudo nesta view estou preso a aprovar pela Esitef. Se precisar aprovar pela Cielo eu terei que mudar a view. O que eu poderia fazer para melhorar este cenário?
Agradeço a atenção!
Obrigado!