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());
}
}