image

Acesso para sempre a +2.150 cursos, inglês e IA

84
%OFF
Article image
José Junior
José Junior04/10/2026 14:04
Share

BACK-END SÊNIOR EventBus vs Import Direto

    Como Parei de Acoplar Meus Módulos e Saí de 0 para 149 Testes + JWT + RBAC Real com Argon2id



    Se seu módulo Produto importa Estoque que importa Financeiro que importa Produto, você não tem arquitetura. Você tem um miojo.
    Esse é o artigo que me coloca no filtro de Back-end Sênior na DIO. Não tem hello world. Tem o erro que me custou 3 noites sem dormir no OpenOps.

    PARTE 1 - O CRIME: Import Direto

    Meu OpenOps começou assim (e todo mundo começa):

    # produto.py from estoque import atualizar_estoque # estoque.py from financeiro import recalcular_cmv from produto import Produto # BUM - circular import hell

    Resultado? Teste precisa de banco real, um módulo não inicia sem o outro, você muda Estoque e quebra Financeiro sem saber por quê. É acoplamento circular. Na cozinha era quando o confeiteiro dependia do açougueiro que dependia do garde manger. Um atrasa, todos param.

    Parei de importar. Comecei a emitir eventos.

    # event_bus.py - núcleo desacoplado bus.emit("stock.changed", product_id=123, qty=-2) bus.emit("stock.low", product_id=123, current=3) # estoque.py - só emite class EstoqueService: def dar_baixa(self, produto_id, qtd): # ... lógica ... self.bus.emit("stock.changed", product_id=produto_id, qty=-qtd) # compras.py - só escuta @bus.on("stock.low") def comprar_automatico(event): if event.current < event.minimo: criar_pedido_compra(event.product_id)

    Benefício real que ninguém fala: como testar sem banco

    def test_estoque_emite_evento(): fake_bus = FakeEventBus() service = EstoqueService(bus=fake_bus) service.dar_baixa(123, 2) assert fake_bus.emitiu("stock.changed", product_id=123) # 0 banco, 0 Docker, teste em 0.02s

    Foi assim que fui de 0 para 149 testes no OpenOps. Não testando banco. Testando eventos.

    image

     "Mas import direto é mais rápido e simples. EventBus não é overengineering para um projeto pequeno?" Minha resposta: É mais rápido até o dia que você precisa testar ou escalar. Qual foi a última vez que um import direto te salvou em produção? Me conta nos comentários. Quero ver quem defende o miojo.

    O SEGUNDO CHUTE: JWT + RBAC com Argon2id


    Depois que desacopei, tomei 3 chutes da OWASP. Chute 1: Senha em texto puro no banco. Chute 2: bcrypt com custo baixo. Chute 3: JWT sem expiração e sem papéis.

    De: 

    user.password = "123456" # nunca faça isso

    Para o que a OWASP recomenda hoje (2024+):

    # Argon2id - vencedor do Password Hashing Competition # Resistente a GPU/ASIC, com controle de memória, tempo e paralelismo hasher = PasswordHasher( time_cost=3, memory_cost=65536, # 64MB parallelism=4 ) hash = hasher.hash("minha_senha_forte")

    JWT + RBAC Real - não é só @login_required:

    # Middleware que eu queria ter lido antes def require_role(*roles): def decorator(func): @wraps(func) async def wrapper(request): token = decode_jwt(request.headers["Authorization"]) if token["role"] not in roles: raise HTTPException(403, "Papel insuficiente") return await func(request) return wrapper return decorator @app.get("/admin/relatorios") @require_role("admin") # viewer, operator, admin async def relatorios_sensiveis(): ...

    No OpenOps: viewer só lê, operator opera, admin faz tudo. Tudo com JWT de curta duração + refresh token.

    image

     "bcrypt já basta, Argon2id é exagero e mais lento. Você está criando problema onde não tem." Minha resposta: bcrypt basta hoje. Argon2id te protege amanhã contra hardware de R$50k que quebra bcrypt em horas. Segurança que paga R$15k+ é sobre antecipar, não reagir. Você usaria bcrypt ou Argon2id em um sistema financeiro real? Quero ver o debate.

    O que isso me ensinou sobre ser Sênior

    Sênior não é quem sabe mais sintaxe. É quem evita o erro que o júnior nem sabe que existe: Import direto parece produtivo, mas cria dívida de teste. Senha com bcrypt parece segura, mas não é state-of-art.

    Meu stack hoje no OpenOps: Python, FastAPI, EventBus, JWT com Argon2id, RBAC real, PostgreSQL, 149 testes desacoplados.

    Código: github.com/josewagnerbljr-sys/openops

    Se você discorda que EventBus vale o esforço ou que Argon2id é overengineering, comenta aqui embaixo.

    GitHub: github.com/josewagnerbljr-sys/openops | LinkedIn: linkedin.com/in/blancoconsultoria | Instagram: @chef_j.blanco

    Share
    Recommended for you
    Reclame AQUI - Dados e IA na Prática
    CI&T - Java AI Copilot
    Itaú - Java com Inteligência Artificial
    Comments (0)