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
ifdesnecessá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.