TOOGLE

Factory Pattern
-
Back-End
Implementação Completa do Factory Method O Factory Method é um padrão de design que permite criar objetos sem especificar a classe exata do objeto que será criado. Em vez de chamar diretamente o construtor de uma classe, o Factory Method define uma interface para criar um objeto, permitindo que subclasses decidam qual classe instanciar. Exemplo Completo: Criação de Cliente para o Azure Blob Storage Neste exemplo, vamos implementar o padrão Factory Method para criar clientes para o Azure Blob Storage de forma flexível. _______________________________________________________________________________________________________ 1 - Definir a Interface do Cliente Primeiro, criamos uma interface que será responsável pela criação do cliente do Blob Storage. public interface IBlobStorageClientFactory { BlobContainerClient CreateBlobContainerClient(); } _______________________________________________________________________________________________________ 2- Implementação do Factory Aqui, criamos uma implementação do Factory que vai gerar um cliente para o Blob Storage. public class BlobStorageClientFactory : IBlobStorageClientFactory { private readonly IConfiguration _configuration; public BlobStorageClientFactory(IConfiguration configuration) { _configuration = configuration; } public BlobContainerClient CreateBlobContainerClient() { var connectionString = _configuration.GetConnectionString("AzureBlobStorageConnectionString"); var blobServiceClient = new BlobServiceClient(connectionString); var containerName = _configuration.GetValue<string>("containerBla"); return blobServiceClient.GetBlobContainerClient(containerName); } } _______________________________________________________________________________________________________ 3 - Controlador que Usa o Factory Agora, utilizamos o Factory em um controlador, onde vamos realizar algumas operações de upload, download e exclusão de arquivos. public class HomeController : Controller { private readonly IBlobStorageClientFactory _blobStorageClientFactory; private readonly string _containerName; public HomeController(IBlobStorageClientFactory blobStorageClientFactory, IConfiguration configuration) { _blobStorageClientFactory = blobStorageClientFactory; _containerName = configuration.GetConnectionString("containerBla") ?? "defaultContainerName"; } public async Task<IActionResult> Index() { var blobContainerClient = _blobStorageClientFactory.CreateBlobContainerClient(); var blobItems = blobContainerClient.GetBlobsAsync(); var files = new List<Azure.Storage.Blobs.Models.BlobItem>(); await foreach (var blobItem in blobItems) { files.Add(blobItem); } return View(files.AsEnumerable()); } }