Open henriqueprj opened 4 years ago
Acredito que o cenário que você abordou é muito válido, principalmente em termos de abrangência. No entanto, em nosso cenário de Brasil, vejo que é muito comum o armazenamento e uso do CPF e CNPJ. Então quando pensei, nesta estrutura, foi por ter visto isso repetidas vezes no mercado. Ou o cara aceita CPF, ou CNPJ. Isso não invalida o cenário proposto pelo @ircnelson. É um cenário válido, mais abrangente.
Outra forma de pensar nisso seria usar o conceito de Union Types. Algo do tipo Either<Cpf, Cnpj>
.
Compreendo.
É, se tratando de design, union types é um bom candidato mesmo. O único problema é que toda vez teria que ficar fazendo pattern matching.
Talvez isso pode ser um problema a ser resolvido por quem está utilizando a lib.
Em algumas aplicações não se limita ser só Cpf ou Cnpj, tem casos de Cpf, Cnpj, Rg, Passaporte, Cnh... Tentar encapsular essa problemática na lib, não sei se seria uma boa.
Mas, se for tentar resolver, poderia ter uma estrutura de dados que seja Documento, DocumentoIdentificacao, DocumentoPessoal etc. E dai é feito a boa e velha checagem pela quantidade de caracteres pra tentar construir um Cpf ou Cnpj, armazenar em uma propriedade respectiva e colocar numa propriedade enum qual foi o tipo construido.
Não me parece elegante... mas vale a discussão :)