IntroduĆ§Ć£o
Uma das responsabilidades do domĆnio de uma aplicaĆ§Ć£o Ć© garantir que os dados que a aplicaĆ§Ć£o manipula estejam em um estado vĆ”lido. No entanto, hĆ” casos em que os dados nĆ£o estĆ£o em um estado vĆ”lido, e o domĆnio precisa notificar o usuĆ”rio sobre esses problemas. A notificaĆ§Ć£o do usuĆ”rio pode ser feita por meio de exceƧƵes ou erros, mas isso pode prejudicar a experiĆŖncia do usuĆ”rio e a confiabilidade do sistema. Uma alternativa Ć© usar o padrĆ£o de Domain Notification para notificar o usuĆ”rio sobre problemas em seus dados.
O padrĆ£o de Domain Notification permite que a aplicaĆ§Ć£o capture todos os problemas em seus dados e apresente-os ao usuĆ”rio de uma maneira amigĆ”vel. Ele Ć© usado para notificar o usuĆ”rio sobre problemas de validaĆ§Ć£o, erros de negĆ³cio, etc. Neste artigo, discutiremos como implementar o padrĆ£o de Domain Notification em NodeJS usando o pacote flunt-js.
O que Ć© o flunt-js?
Flunt-js Ć© uma biblioteca criada por min para validaĆ§Ć£o de dados em JavaScript. Ele oferece uma abordagem simples e intuitiva para validar objetos. O flunt-js Ć© inspirado no Flunt para .NET do AndrĆ© Baltieri e Ć© compatĆvel com o ES6 e o TypeScript ( Irei trabalhar na implementaĆ§Ć£o para suportar 100% sem ter que sinalizar no arquivo para permitir js).
ImplementaĆ§Ć£o
Para implementar o padrĆ£o de Domain Notification, vocĆŖ precisa criar uma classe que encapsule a lĆ³gica de validaĆ§Ć£o e notificaĆ§Ć£o. Essa classe serĆ” responsĆ”vel por notificar o usuĆ”rio sobre quaisquer problemas em seus dados.
Vamos criar uma entidade de exemplo User que possui as seguintes propriedades: nome, email, senha e cpf. Vamos usar o flunt-js para validar as propriedades de User e notificar o usuƔrio sobre quaisquer problemas.
Primeiro, precisamos instalar a biblioteca:
npm install flunt-js
Usando o FluntJS e criando um entidade com validaƧƵes
const { Notifiable, Contract } = require('flunt-js');
class User extends Notifiable {
constructor(nome, email, senha, cpf) {
super();
this.nome = nome;
this.email = email;
this.senha = senha;
this.cpf = cpf;
this.dataCadastro = new Date();
super.AddNotifications(
new Contract()
.isEmail(email, 'O email informado Ʃ invƔlido.')
.hasMaxLen(nome, 50, 'O nome deve ter no mƔximo 50 caracteres.')
.hasMinLen(senha, 6, 'A senha deve ter no mĆnimo 6 caracteres.')
.isFixedLen(cpf, 11, 'O CPF informado Ʃ invƔlido.')
);
}
}
const usuario = new User('John Doe', 'johndoe@example.com', '123456', '12345678901');
// Executa a validaĆ§Ć£o e imprime as mensagens de erro, se houver
if (!usuario.isValid()) {
console.log(usuario.getMessages());
} else {
console.log('UsuƔrio vƔlido.');
}
Nesse cĆ³digo, a classe User encapsula a lĆ³gica de validaĆ§Ć£o e notificaĆ§Ć£o usando o flunt-js. A funĆ§Ć£o validar() usa o flunt-js para validar as propriedades de User e notificar o usuĆ”rio sobre quaisquer problemas.
O flunt-js suporta vĆ”rios tipos de validaĆ§Ć£o, incluindo validaĆ§Ć£o de comprimento mĆ”ximo (hasMaxLen), validaĆ§Ć£o de comprimento mĆnimo (hasMinLen), validaĆ§Ć£o de formato de e-mail (isEmail), validaĆ§Ć£o de valor fixo (isFixedLen), etc. Ć possĆvel personalizar as mensagens de erro retornadas por cada validaĆ§Ć£o.
const usuario = new User('John Doe', 'johndoe@example.com', '123', '1234564233432478901');
// Executa a validaĆ§Ć£o e imprime as mensagens de erro, se houver
if (!usuario.isValid()) {
console.log(usuario.getMessages());
} else {
// nĆ£o entra aqui pois os dados sĆ£o invĆ”lidos
console.log('UsuƔrio vƔlido.');
}
Nesse cĆ³digo, criamos um novo usuĆ”rio com dados invĆ”lidos e validamos esses dados. Se a validaĆ§Ć£o falhar, a funĆ§Ć£o notifications retornarĆ” uma lista de mensagens de erro. Podemos usar essa lista para notificar o usuĆ”rio sobre quaisquer problemas.
Agora que temos nossa entidade User, podemos usĆ”-la para validar os dados do usuĆ”rio em uma rota POST. Por exemplo, se estivermos criando um novo usuĆ”rio em nossa aplicaĆ§Ć£o, podemos fazer o seguinte:
const express = require('express');
const User = require('./User');
const app = express();
app.use(express.json());
app.post('/users', (req, res) => {
const { name, email, password } = req.body;
const user = new User(name, email, password);
if (user.isValid()) {
// retorna a lista de notificaƧƵes ( caso queria somente as mensagens pode usar o getMessages() )
return res.status(400).json(user.notifications);
}
// Salvar usuƔrio no banco de dados
});
ConclusĆ£o
O padrĆ£o de Domain Notification Ć© uma maneira de notificar o usuĆ”rio sobre problemas em seus dados. Ele permite que a aplicaĆ§Ć£o capture todos os problemas em seus dados e apresente-os ao usuĆ”rio de uma maneira amigĆ”vel.
Neste artigo, discutimos como implementar o padrĆ£o de Domain Notification em Node.js usando o pacote flunt-js. Ć uma biblioteca para validaĆ§Ć£o de dados em JavaScript que oferece uma abordagem simples e intuitiva para validar objetos.
A validaĆ§Ć£o usando o flunt-js ajuda a garantir que os dados estejam em um estado vĆ”lido e notifica o usuĆ”rio sobre quaisquer problemas. Usando a validaĆ§Ć£o, podemos garantir que a aplicaĆ§Ć£o estĆ” recebendo dados vĆ”lidos e evitar problemas futuros.
ReferĆŖncias
Flunt-js: https://github.com/jhonesgoncalves/flunt
Flunt: https://github.com/andrebaltieri/Flunt
Domain Notification: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice#domain-events-and-notifications
Top comments (0)