Decorator Pattern
-
Back-End
O Decorator é um padrão de design que permite adicionar funcionalidades a um objeto de forma dinâmica, sem alterar o código da classe original. Ele "envolve" a classe original (ou serviço) e pode modificar seu comportamento, como adicionar logs, validações, ou outras funcionalidades adicionais.
Como é usado:
Definição do Decorator: Criamos uma classe que implementa a mesma interface da classe original (por exemplo, IBlobService), mas no seu construtor, ela recebe a instância original.
Interceptação de Métodos: O Decorator executa a lógica adicional (como logs, medições de tempo, etc.) e, em seguida, chama os métodos da classe original.
O que o Decorator faz no seu caso:
Registra Logs: Ele intercepta as chamadas de método do BlobService, mede o tempo de execução e registra logs de sucesso ou erro.
Exemplo rápido:
O BlobServiceLoggingDecorator "envolve" o BlobService e registra logs de execução:
________________________________________________________________________________________
public class BlobServiceLoggingDecorator : IBlobService
{
private readonly IBlobService _innerService;
private readonly ILogger _logger;
public BlobServiceLoggingDecorator(IBlobService innerService, ILogger logger)
{
_innerService = innerService;
_logger = logger;
}
public async Task<IEnumerable<BlobItemWithMetadata>> ListFilesAsync()
{
_logger.LogInformation("Iniciando ListFilesAsync...");
var result = await _innerService.ListFilesAsync();
_logger.LogInformation("ListFilesAsync completado.");
return result;
}
}_____________________________________________________
Neste exemplo, ListFilesAsync() é chamado no BlobService original, mas com logs adicionais feitos pelo decorator.
______________________________________________________
log
BlobStorage.Services.Decorators.BlobServiceLoggingDecorator: Information: ListFilesAsync completed in 1620 ms.