Validator4D
- Active · last change 3-20-2026
- ★ 1 on GitHub
README
Validator4D 🛡️
Validação de dados elegante, fluida e baseada em Atributos (RTTI) para Delphi.
O Validator4D permite que você mantenha as suas regras de validação acopladas diretamente às suas Entidades e DTOs, mantendo o seu código limpo, declarativo e livre de intermináveis blocos de if/else. Feito sob medida para projetos que utilizam Clean Architecture.
⚡ Recursos
- Zero Acoplamento: Suas regras de validação ficam na própria entidade usando Atributos.
- Baseado em RTTI: Validação dinâmica e invisível em tempo de execução.
- Extensível: Crie seus próprios atributos de validação customizados com facilidade.
- Lista de Erros Completa: Retorna todas as falhas de validação de uma vez, ideal para APIs REST.
📦 Instalação
Via Vite4D (Recomendado)
Se você estiver utilizando o CLI Vite4D para gerenciar seu projeto, basta rodar o comando abaixo no seu terminal para injetar o Validator4D automaticamente na sua pasta modules:
v4d install validatorInstalação Manual
- Faça o download do repositório.
- Adicione a pasta
src(ou os arquivos .pas) ao Search Path do seu projeto Delphi.
🚀 Como Usar
1. Anotando sua Entidade
Adicione a unit Validator4D.Attributes na seção uses e decore as propriedades da sua classe com as regras de negócio:
uses
Validator4D.Attributes;
type
TUsuario = class
private
FNome: string;
FEmail: string;
FIdade: Integer;
public
[NotNull('O nome é obrigatório')]
[MinLength(3, 'O nome deve ter no mínimo 3 caracteres')]
property Nome: string read FNome write FNome;
[Email('E-mail em formato inválido')]
property Email: string read FEmail write FEmail;
[MinValue(18, 'O usuário deve ser maior de idade')]
property Idade: Integer read FIdade write FIdade;
end;2. Validando o Objeto
Utilize o TValidator (da unit Validator4D.Core) para processar as regras. Ele retorna um IValidationResult contendo a lista de erros, caso existam.
uses
Validator4D.Core, Validator4D.Types;
var
LUsuario: TUsuario;
LResult: IValidationResult;
begin
LUsuario := TUsuario.Create;
try
LUsuario.Nome := 'Pa';
LUsuario.Email := 'email_invalido.com';
LUsuario.Idade := 15;
LResult := TValidator.Validate(LUsuario);
if not LResult.IsValid then
begin
// Retorna todos os erros formatados e separados por quebra de linha
ShowMessage(LResult.GetErrorsAsString);
// Ou você pode iterar sobre a lista LResult.Errors para tratar individualmente
end;
finally
LUsuario.Free;
end;
end;🛠️ Atributos Nativos Disponíveis
| Atributo | Descrição | Exemplo de Uso |
|---|---|---|
[NotNull] |
Garante que o valor (ou objeto) não seja nulo. | [NotNull('Obrigatório')] |
[NotEmpty] |
Garante que a string não esteja vazia ou com espaços. | [NotEmpty('Não pode ser vazio')] |
[MinLength] |
Tamanho mínimo para strings. | [MinLength(5)] |
[MaxLength] |
Tamanho máximo para strings. | [MaxLength(50)] |
[MinValue] |
Valor numérico mínimo (Double/Integer). | [MinValue(18)] |
[MaxValue] |
Valor numérico máximo (Double/Integer). | [MaxValue(100)] |
[Email] |
Valida se a string é um e-mail válido via Regex. | [Email('E-mail inválido')] |
[Regex] |
Valida a string contra uma expressão regular customizada. | [Regex('^[0-9]+$', 'Apenas números')] |
👨💻 Autor
Criado e mantido por Paulo Roberto Alves.
📄 Licença
Este projeto está licensed sob a licença MIT - veja o arquivo LICENSE para mais detalhes.

