Olá, ANTES de assistir a aula de refatoração eu havia tentado "automatizar" a verificação do tipo do documento (cpf ou cnpj) por me incomodar ter que indicar explicitamente o tipo do documento, porém não usei o Factory por não lembrar desse recurso. Tive diversas dificuldades, mas aparentemente tanto a formatação quanto a validação deu certo.
Mas e em termo de boas práticas?
Claro que como foi feito na aula está bem melhor em legibilidade e simplicidade, porém não queria subir no Github um código feito pelo professor e copiado por mim, entretanto, também não quero subir algo que seja visto com maus olhos por alguma má prática.
Enfim, vamos ao código:
from validate_docbr import CPF, CNPJ
class CpfCnpj:
def __init__(self, documento):
documento = str(documento)
if self.documento_e_valido(documento):
self.documento = documento
else:
raise ValueError("Documento inválido!")
def __str__(self):
return self.documento_formatado()
def verifica_tipo_documento(self, documento):
if len(documento) == 11:
tipo_documento = "cpf"
return tipo_documento
elif len(documento) == 14:
tipo_documento = "cnpj"
return tipo_documento
else:
raise ValueError("O documento não tem um tipo válido!")
def documento_e_valido(self, documento):
if self.verifica_tipo_documento(documento) == "cpf":
validador = CPF()
return validador.validate(documento)
elif self.verifica_tipo_documento(documento) == "cnpj":
validador = CNPJ()
return validador.validate(documento)
else:
raise ValueError("Documento inválido!")
def documento_formatado(self):
if self.verifica_tipo_documento(self.documento) == "cpf":
mascara = CPF()
return mascara.mask(self.documento)
elif self.verifica_tipo_documento(self.documento) == "cnpj":
mascara = CNPJ()
return mascara.mask(self.documento)
else:
raise ValueError("Quantidade de digitos inválida!!")
Obs.: Sei que a Factory é útil e ajuda na escalabilidade do código, nesse caso, essencial para adicionar novos documentos sem ter que mexer no código inteiro. Minha questão está nas boas práticas da sua ausência considerando apenas esse código, sem escalabilidade.