Skip to content

gbmsaraujo/factory-sistema-exportacao-dados

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Factory Pattern - Sistema de Exportação de Dados

Este projeto demonstra a implementação do padrão de design Factory Method em Python, criando um sistema flexível para exportação de dados em diferentes formatos.

📋 Sobre o Projeto

O sistema utiliza o Factory Pattern para criar exportadores de dados de forma dinâmica, permitindo a exportação de dados de vendas em múltiplos formatos (CSV, JSON) sem acoplar o código cliente às implementações específicas.

🏗️ Padrões de Design Implementados

Factory Method Pattern

  • Problema resolvido: Criação de objetos sem especificar suas classes concretas
  • Benefícios:
    • Baixo acoplamento entre cliente e produtos concretos
    • Facilita adição de novos formatos de exportação
    • Código mais limpo e manutenível

📁 Estrutura do Projeto

01_factory/
├── README.md                    # Documentação do projeto
├── run.py                       # Ponto de entrada da aplicação
└── src/                         # Código fonte principal
    ├── __init__.py
    ├── data.py                  # Dados de exemplo para exportação
    ├── interfaces/              # Interfaces/Contratos do sistema
    │   ├── __init__.py
    │   └── interfaces.py
    ├── exporters/               # Implementações dos exportadores
    │   ├── __init__.py
    │   └── exporters.py
    └── factories/               # Factories e seletor de factories
        ├── __init__.py
        ├── factories.py
        └── handle_factories.py

🔧 Arquitetura

Interfaces

  • IReporterExporter: Define o contrato para exportadores de dados
  • IReporterFactory: Define o contrato para factories de exportadores

Implementações Concretas

  • JSONExporter: Exporta dados no formato JSON
  • CSVExporter: Exporta dados no formato CSV

Factories

  • ExportJsonFactory: Cria instâncias do JSONExporter
  • ExportCSVFactory: Cria instâncias do CSVExporter
  • handle_exports_factories: Seletor de factory baseado no tipo solicitado

🚀 Como Usar

Executar o projeto

python3 run.py

Testar diferentes formatos

# Para testar JSON, edite o arquivo run.py e altere:
# export_type = "json"

Exemplo de saída

Formato CSV:

Dados exportados em formato csv:
id_venda,produto,quantidade,preco_unitario
V001,Laptop Gamer,1,5500.0
V002,Mouse Vertical,2,180.5
V003,Teclado Mecânico,1,450.75

Formato JSON:

[
    {
        "id_venda": "V001",
        "produto": "Laptop Gamer",
        "quantidade": 1,
        "preco_unitario": 5500.0
    },
    {
        "id_venda": "V002",
        "produto": "Mouse Vertical",
        "quantidade": 2,
        "preco_unitario": 180.5
    }
]

Exemplo de uso no código

from src.factories.handle_factories import handle_exports_factories
from src.data import dados_vendas

# Definir o formato desejado
formato = "csv"  # ou "json"

# Obter a factory apropriada
factory = handle_exports_factories(formato)

# Processar e exportar os dados
resultado = factory.process_document(dados_vendas)
print(resultado)

📊 Formatos Suportados

Formato Descrição Exemplo de Saída
CSV Comma-Separated Values id_venda,produto,quantidade,preco_unitario\nV001,Laptop Gamer,1,5500.0
JSON JavaScript Object Notation [{"id_venda": "V001", "produto": "Laptop Gamer"}]

🔄 Extensibilidade

Para adicionar um novo formato de exportação:

  1. Criar o exportador:
from src.interfaces.interfaces import IReporterExporter
from typing import List, Dict, Any

class XMLExporter(IReporterExporter):
    def export(self, data: List[Dict[str, Any]]) -> str:
        # Implementar lógica de exportação XML
        pass
  1. Criar a factory:
from src.interfaces.interfaces import IReporterFactory

class ExportXMLFactory(IReporterFactory):
    def factory_exporter(self) -> XMLExporter:
        return XMLExporter()
  1. Adicionar ao seletor:
# Em handle_factories.py
factories = {
    "csv": ExportCSVFactory(),
    "json": ExportJsonFactory(),
    "xml": ExportXMLFactory(),  # Nova factory
}

📚 Conceitos Aplicados

  • SOLID Principles: Especialmente Open/Closed Principle
  • Dependency Inversion: Dependência de abstrações, não de concreções
  • Single Responsibility: Cada classe tem uma única responsabilidade
  • Type Hints: Código tipado para melhor manutenibilidade

🛠️ Tecnologias

  • Python 3.8+
  • Typing: Para type hints e melhor documentação do código
  • ABC (Abstract Base Classes): Para definição de interfaces

🎯 Benefícios da Implementação

  1. Flexibilidade: Fácil adição de novos formatos
  2. Manutenibilidade: Código bem estruturado e separado por responsabilidades
  3. Testabilidade: Cada componente pode ser testado independentemente
  4. Reutilização: Factories podem ser reutilizadas em diferentes contextos

📝 Próximos Passos

  • Documentar código com docstrings
  • Adicionar testes unitários
  • Implementar exportação para XML
  • Adicionar configurações personalizáveis para cada formato
  • Implementar logging para operações de exportação
  • Criar CLI para uso em linha de comando

🤝 Contribuindo

Este é um projeto educacional para demonstrar o Factory Pattern. Sugestões e melhorias são bem-vindas!

📄 Licença

Este projeto é para fins educacionais e de estudo do padrão Factory Method.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages