Posso validar o nome do aluno diretamente na entidade ou devo criar um Value Object específico para o nome e validar no próprio Value Object, garantindo que o nome esteja preenchido e tenha, no mínimo, 5 caracteres?
Posso validar o nome do aluno diretamente na entidade ou devo criar um Value Object específico para o nome e validar no próprio Value Object, garantindo que o nome esteja preenchido e tenha, no mínimo, 5 caracteres?
Olá, Antonio! Tudo bem?
Essa é uma excelente pergunta e bastante relevante quando se trata de Clean Architecture e boas práticas de design de software.
Você pode seguir dois caminhos:
Validação na Entidade: Você pode validar o nome diretamente na entidade do aluno. Isso pode ser mais simples e direto, mas pode acabar misturando responsabilidades, já que a entidade estaria cuidando tanto dos dados quanto das regras de validação.
class Aluno {
private $nome;
public function __construct(string $nome) {
$this->setNome($nome);
}
public function setNome(string $nome) {
if (empty($nome) || strlen($nome) < 5) {
throw new InvalidArgumentException("Nome deve ter no mínimo 5 caracteres.");
}
$this->nome = $nome;
}
public function getNome(): string {
return $this->nome;
}
}
Value Object para Nome: Criar um Value Object específico para o nome pode ser uma abordagem mais limpa e alinhada com os princípios da Clean Architecture. Isso separa claramente a responsabilidade da validação para o Value Object, tornando a entidade mais coesa e focada apenas em suas responsabilidades principais.
class Nome {
private $valor;
public function __construct(string $valor) {
if (empty($valor) || strlen($valor) < 5) {
throw new InvalidArgumentException("Nome deve ter no mínimo 5 caracteres.");
}
$this->valor = $valor;
}
public function getValor(): string {
return $this->valor;
}
}
class Aluno {
private $nome;
public function __construct(Nome $nome) {
$this->nome = $nome;
}
public function getNome(): Nome {
return $this->nome;
}
}
A segunda abordagem, utilizando um Value Object, é geralmente recomendada em arquiteturas mais complexas, pois promove uma maior separação de responsabilidades e facilita a manutenção e a evolução do código.
Espero ter ajudado e bons estudos!