Pular para conteúdo

Aplicando transformações com .Apply()

O método Apply() permite aplicar transformações fluentes e funcionais sobre objetos, mantendo a legibilidade do código.

Essa abordagem é ideal quando você precisa fazer ajustes pontuais em objetos mapeados, como preencher propriedades técnicas no backend (por exemplo, definir o Id ou CreatedAt) sem poluir o fluxo principal da lógica de negócio.


Como funciona

O método Apply<T>(this T obj, Action<T> apply) executa a ação definida e retorna o mesmo objeto, permitindo encadeamento fluente.

public class Produto
{
    public Guid Id { get; set; }
    public string Nome { get; set; }
    public DateTime CriadoEm { get; set; }
}

Exemplo prático

Vamos supor que o Id deve ser criado no backend, e não pelo banco de dados:

var produto = dto.MapTo<Produto>()
    .Apply(p => p.Id = Guid.NewGuid())
    .Apply(p => p.CriadoEm = DateTime.UtcNow);

O objeto é mapeado e, em seguida, ajustado com os valores desejados — tudo em cadeia, de forma limpa.


Vantagens

  • Reduz código repetitivo
  • Melhora a expressividade do fluxo
  • Evita a criação de métodos auxiliares ou blocos if desnecessários

Dica

Você pode usar o Apply() em qualquer objeto, não apenas nos resultantes de MapTo<T>().
Ele é útil para construir pipelines simples de transformação com clareza e baixo acoplamento.

var cliente = new Cliente()
    .Apply(c => c.Ativo = true)
    .Apply(c => c.CriadoPor = usuarioLogado.Nome);

Fluente e reutilizável

Com Apply(), você expressa intenção de forma direta, mantendo o código limpo e encadeado — sem abrir mão da separação de responsabilidades.