Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

CPF como VO?

Quero ver se entendi corretamente......

Eu poderia criar uma classe CPF e trata-la como um VO e nela colocar as validações com respeito ao CPF?

Por exemplo: CPF.java:

package br.com.alura.codechella.domain;

public class CPF {

    public String document;

    public CPF(String document){
        if (document == null || !document.matches("\\d{3}\\.\\d{3}\\.\\d{3}\\-\\d{2}")) {
            throw new IllegalArgumentException("Cpf no padrão incorreto!");
        }
        this.document = document;
    }

    public String getDocument() {
        return document;
    }

    public void setDocument(String document) {
        this.document = document;
    }
}

Usuario:

package br.com.alura.codechella.domain.entities.usuario;

import br.com.alura.codechella.domain.CPF;
import br.com.alura.codechella.domain.Endereco;

import java.time.LocalDate;

public class Usuario {
    private CPF cpf;
......

public Usuario(String cpf, String nome, LocalDate nascimento, String email) {

        this.cpf=new CPF(cpf);
        this.nome = nome;
        this.nascimento = nascimento;
        this.email = email;
    }
    public CPF getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf=new CPF(cpf);
    }

Essa classe CPF, seria um VO ou uma Entidade? Valeuuu

1 resposta
solução!

Oi Vinicius, tudo bem?

Você tá no caminho certo ao pensar em encapsular a lógica de validação do CPF em uma classe própria. No contexto da Clean Architecture e de muitos outros padrões de design de software, isso é uma prática recomendada para manter o código organizado e focado.

Respondendo à sua pergunta, a classe CPF que você descreveu seria mais apropriadamente classificada como um Value Object (VO) e não como uma Entidade. Isso se deve ao fato de que um VO é definido principalmente pelo seu valor e não possui uma identidade própria que o distingue de outros objetos com o mesmo valor. No seu caso, o CPF é definido unicamente pelo número do documento, e dois objetos CPF com o mesmo número devem ser considerados iguais, sem nenhuma distinção adicional que uma Entidade normalmente teria.

E, o uso de VOs como o CPF ajuda a garantir que os dados são válidos em toda a aplicação, pois as validações estão encapsuladas dentro da classe e são aplicadas sempre que um novo objeto é criado. Isso reduz a possibilidade de erros e inconsistências relacionadas ao formato ou à validade do CPF em diferentes partes do sistema.

Um abraço e bons estudos.