Entendendo o conceito de Mappers
node
No desenvolvimento de software, especialmente em aplicações que interagem com bancos de dados, a necessidade de converter dados entre diferentes representações é uma constante e é aqui que entram em cena os mappers. Mas você sabe que são exatamente esses elementos e qual a sua importância?

O que é um Mapper?

Um mapper, em sua essência, é um padrão de projeto que tem como objetivo mapear objetos de um domínio para outro. Ele atua como uma ponte entre duas representações distintas de dados, facilitando a comunicação e a transformação entre elas.
Analogia: Imagine que você precisa traduzir um texto de português para inglês. O mapper seria o dicionário, que contém as correspondências entre as palavras em ambas as línguas.

Por que usar Mappers?

  • Abstração de detalhes: Os mappers escondem a complexidade da conversão de dados, permitindo que o desenvolvedor se concentre na lógica de negócio.
  • Reutilização de código: Um mapper bem projetado pode ser reutilizado em diferentes partes da aplicação, evitando a duplicação de código.
  • Flexibilidade: Ao isolar a lógica de mapeamento, os mappers facilitam a adaptação da aplicação a mudanças nos modelos de dados.
  • Melhora da testabilidade: Os mappers podem ser testados isoladamente, garantindo a qualidade do código.

Mappers e ORMs

ORMs (Object-Relational Mappers) como o Prisma são exemplos clássicos de utilização de mappers. Eles automatizam o processo de mapeamento entre objetos em memória (representação orientada a objetos) e registros em um banco de dados relacional.
Como o Prisma funciona como um mapper:
  • Definição de modelos: Você define modelos que representam as tabelas do seu banco de dados, especificando os campos e seus tipos.
  • Mapeamento automático: O Prisma gera código para mapear esses modelos para as respectivas tabelas, permitindo que você interaja com o banco de dados usando objetos.
  • Consultas e atualizações: Ao executar consultas ou atualizar dados, o Prisma gera as consultas SQL correspondentes e mapeia os resultados para os seus objetos.

Quando criar um mapper personalizado?

Embora ORMs como o Prisma ofereçam um poderoso mecanismo de mapeamento, pode haver situações em que um mapper personalizado seja necessário:
  • Transformações complexas: Quando as transformações entre os objetos envolvem lógica complexa ou cálculos específicos.
  • Múltiplas representações: Se os dados precisam ser representados de diferentes formas para diferentes partes da aplicação.
  • Legado: Em sistemas legados com estruturas de dados complexas, um mapper pode facilitar a integração com novas tecnologias.

Bora para um Exemplo Prático 👇

import { PrismaService } from './prisma.service'; import { Injectable } from '@nestjs/common'; import { Notification } from './notification.entity'; @Injectable() export class PrismaNotificationsRepository { constructor(private prisma: PrismaService) {} async create(notification: Notification) { await this.prisma.notification.create({ data: { id: notification.id, category: notification.category, // ... outras propriedades }, }); } }
Detalhando o Processo:
1. Objeto de Domínio: A classe Notification representa um objeto de domínio, ou seja, uma representação do conceito de notificação no nosso sistema.
2. Modelo de Dados: A tabela notification no banco de dados é o modelo de dados correspondente à entidade Notification.
3. Mapeamento: O Prisma realiza o mapeamento entre essas duas representações:
4. Leitura: Quando passamos um objeto Notification para o método create, o Prisma extrai as propriedades desse objeto.
5. Conversão: Essas propriedades são convertidas para um formato compatível com o banco de dados (SQL).
6. Escrita: A consulta SQL gerada é executada, inserindo um novo registro na tabela notification.
Visualizando o Mapeamento:
Objeto Notification (memória) -----> Consulta SQL (banco de dados) id: string id: UUID category: string category: varchar // ... outras propriedades
O Prisma como Facilitador:
  • Abstração: O Prisma esconde a complexidade da geração de consultas SQL, permitindo que nos concentremos na lógica do nosso domínio.
  • Tipo Segurança: Garante que os dados sejam mapeados corretamente para os tipos de dados definidos no banco de dados.
  • Flexibilidade: Permite personalizar o mapeamento em casos mais complexos.
Em resumo o código demonstra como o Prisma, atuando como um mapper, facilita a persistência de dados, convertendo objetos do nosso domínio em registros em um banco de dados relacional. Essa transformação é essencial para que a aplicação possa armazenar e recuperar informações de forma eficiente.
 
Os mappers são ferramentas poderosas que simplificam o desenvolvimento de software, permitindo que os desenvolvedores se concentrem na lógica de negócio. Ao entender os conceitos básicos e os benefícios dos mappers, você estará melhor preparado para construir aplicações mais robustas e escaláveis.

Bora entender na prática com o Diego?

Video preview

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA