Translate

Mostrar mensagens com a etiqueta Factory Pattern. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Factory Pattern. Mostrar todas as mensagens

sábado, 26 de dezembro de 2020

Design Patterns no COBOL e no IBM Z : Como um Padawan COBOL pode escrever software que sobrevive décadas

 

Bellacosa Mainframe e o design patterns no ibm mainframe e cobol

☕ Um Café no Bellacosa Mainframe

Design Patterns no COBOL e no IBM Z

Como um Padawan COBOL pode escrever software que sobrevive décadas

"Um bom programa resolve um problema. Um excelente programa continua resolvendo o mesmo problema durante trinta anos, passando por centenas de desenvolvedores sem virar um monstro impossível de manter."

Existe uma grande ironia no mundo da programação.

Muitos desenvolvedores COBOL acreditam que Design Patterns nasceram junto com Java, C++ ou C#. Outros pensam que são conceitos exclusivos da programação orientada a objetos.

Na realidade...

o Mainframe já utilizava diversos padrões de projeto muito antes do livro "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four - 1994).

A diferença é que ninguém chamava isso de Pattern.

Chamavam de:

  • Standard Program

  • Skeleton

  • Modelo Corporativo

  • Framework Interno

  • Programa Base

  • Convenção da Empresa

Quando Christopher Alexander criou o conceito de Pattern Language para arquitetura civil nos anos 70, ele dizia que existiam soluções recorrentes para problemas recorrentes.

A Engenharia de Software simplesmente emprestou essa ideia.

E adivinhe...

Grandes bancos já faziam exatamente isso com COBOL desde os anos 70.

Hoje vamos descobrir como um Padawan pode utilizar esses conceitos para produzir software digno de um Mestre Jedi do IBM Z.


O que é um Pattern?

Imagine que você precisa construir cem casas.

Você não desenha uma planta completamente diferente para cada uma.

Você reutiliza soluções que funcionam.

Na programação acontece exatamente o mesmo.

Um Pattern é:

Uma solução reutilizável para um problema recorrente.

Não é código.

Não é framework.

Não é biblioteca.

É uma maneira inteligente de organizar o código.


Por que Patterns existem?

Porque desenvolvedores repetem erros.

Depois repetem soluções.

Depois percebem que algumas soluções sempre funcionam.

Então essas soluções recebem um nome.

Quando recebem um nome...

Podem ser ensinadas.


O primeiro Pattern que todo programador COBOL aprende (sem perceber)

IDENTIFICATION DIVISION.

ENVIRONMENT DIVISION.

DATA DIVISION.

PROCEDURE DIVISION.

MAIN.

    PERFORM INICIALIZA

    PERFORM PROCESSA

    PERFORM FINALIZA

STOP RUN.

Você já viu isso milhares de vezes.

Isso possui nome.

Template Method Pattern

Existe um fluxo fixo.

Cada etapa executa uma responsabilidade.

É um Pattern.


Pattern 1 — Template Method

Origem:

Gang of Four.

No COBOL ele existe há décadas.

Estrutura:

MAIN

↓

INICIALIZA

↓

VALIDA

↓

PROCESSA

↓

GRAVA

↓

FINALIZA

Cada rotina possui apenas uma responsabilidade.

Exemplo ruim

MAIN.

READ

VALIDA

CALCULA

GRAVA

IMPRIME

LOG

TRATA ERRO

ATUALIZA DB2

CONSOME MQ

GERA XML

ENVIA EMAIL

TERMINA

800 linhas.

Ninguém entende.

Agora veja:

MAIN.

PERFORM READ-DADOS

PERFORM VALIDAR

PERFORM CALCULAR

PERFORM GRAVAR

PERFORM FINALIZAR

Agora qualquer pessoa entende.


Benefícios

Código limpo.

Fluxo legível.

Debug simples.

Mais fácil de testar.

Mais fácil de manter.


Pattern 2 — Guard Clause

Muito usado atualmente.

Também chamado de Early Exit.

Em COBOL:

Ao invés de criar IF dentro de IF dentro de IF...

Faça validações logo no início.

Ruim

IF CLIENTE-ATIVO

    IF LIMITE > 0

        IF SENHA-OK

            PROCESSA

        END-IF

    END-IF

END-IF

Melhor

IF NOT CLIENTE-ATIVO
    GO TO FINALIZA
END-IF

IF LIMITE <= ZERO
    GO TO FINALIZA
END-IF

IF NOT SENHA-OK
    GO TO FINALIZA
END-IF

PERFORM PROCESSA

Muito mais simples.


Pattern 3 — Dispatcher Pattern

Muito usado em CICS.

Imagine:

MENU

1 Clientes

2 Contas

3 Extrato

4 PIX

Ao invés de escrever centenas de IF...

Use um Dispatcher.

EVALUATE OPCAO

WHEN 1

PERFORM CLIENTES

WHEN 2

PERFORM CONTAS

WHEN 3

PERFORM EXTRATO

WHEN OTHER

PERFORM ERRO

END-EVALUATE

Esse Pattern aparece em:

  • CICS

  • Batch

  • APIs

  • Menus

  • Serviços REST


Pattern 4 — Factory

Parece moderno.

Mas existe em COBOL.

Imagine:

Arquivo pode ser:

VSAM

DB2

IMS

MQ

Você não quer que o programa saiba qual utilizar.

Então cria uma rotina.

OBTER-DADOS

↓

VSAM

ou

DB2

ou

IMS

Quem chama:

PERFORM OBTER-DADOS

Não importa de onde veio.

Isso é abstração.


Pattern 5 — Strategy

Muito usado em bancos.

Imagine cálculo de juros.

Existem dezenas.

Pessoa Física.

Pessoa Jurídica.

Consignado.

Agrícola.

Imobiliário.

Ao invés de centenas de IF...

Cada estratégia fica separada.

CALCULO PF

CALCULO PJ

CALCULO RURAL

CALCULO PREMIUM

Depois:

EVALUATE TIPO

WHEN PF

PERFORM CALCULO-PF

WHEN PJ

PERFORM CALCULO-PJ

END-EVALUATE

Cada regra evolui sozinha.


Pattern 6 — Chain of Responsibility

Muito utilizado em validações.

Exemplo:

Receber pagamento.

Primeiro:

Validar CPF.

Validar Conta.

Saldo.

Limite.

Fraude.

Autorizar.

Cada etapa apenas verifica uma responsabilidade.

Se falhar...

Para tudo.

É exatamente como uma esteira.


Pattern 7 — Facade

Imagine um sistema extremamente complexo.

Para gerar um boleto você precisa:

DB2

MQ

CICS

VSAM

Logs

SMF

Impressão

O usuário não quer saber disso.

Então existe uma fachada.

PERFORM GERAR-BOLETO

Internamente:

GERA

↓

DB2

↓

VSAM

↓

MQ

↓

LOG

↓

PDF

A fachada esconde toda complexidade.


Pattern 8 — Singleton

Muito famoso.

No Mainframe aparece em:

Tabela de parâmetros.

Configuração.

Área comum.

TS Queue.

Control Blocks.

Existe apenas uma instância.

Todos utilizam.


Pattern 9 — Repository

Hoje famoso em Java.

No COBOL:

Camada de acesso ao banco.

Ao invés de:

EXEC SQL

SELECT...

END-EXEC

Espalhado por cem programas.

Criamos:

CLIENTE-REPOSITORY

↓

CONSULTA

↓

ATUALIZA

↓

DELETE

↓

INSERT

Os programas apenas chamam.

Muito mais organizado.


Pattern 10 — Service Layer

Muito utilizado atualmente.

Exemplo.

Tela chama:

CONSULTAR CLIENTE

A camada Service decide:

Consultar DB2.

Consultar VSAM.

Consultar Cache.

Consultar API.

Quem chamou não sabe.

Nem precisa saber.


Pattern 11 — Adapter

Muito importante na Modernização.

Imagine.

Sistema antigo retorna:

PIC X(30)

Nova API quer JSON.

Adapter converte.

COBOL

↓

Adapter

↓

REST JSON

É exatamente o trabalho do z/OS Connect.


Pattern 12 — Builder

Imagine montar uma mensagem MQ.

Existem dezenas de campos.

Ao invés de fazer tudo junto...

Criamos uma rotina.

INICIA

↓

CLIENTE

↓

CONTA

↓

SALDO

↓

HEADER

↓

FINALIZA

Depois envia.

Muito mais organizado.


Pattern 13 — Observer

Muito comum hoje.

Eventos.

Exemplo.

Conta alterada.

Vários sistemas precisam saber.

Conta

↓

Evento

↓

Auditoria

↓

CRM

↓

Fraude

↓

Analytics

No Mainframe isso acontece usando:

MQ

Kafka

CDC

Eventos CICS


Pattern 14 — Retry Pattern

Rede falhou.

API indisponível.

MQ ocupado.

Ao invés de abortar imediatamente:

Tenta

↓

Falhou

↓

Espera

↓

Tenta novamente

↓

Falhou

↓

Espera

↓

Última tentativa

Muito usado em integrações.


Pattern 15 — Circuit Breaker

Extremamente moderno.

Imagine.

API está fora.

Sem Circuit Breaker:

100 mil chamadas.

Todas falham.

Com Circuit Breaker:

Após determinado número de erros...

Ele para de chamar.

Protege o sistema.

Muito usado em microsserviços.

Hoje também aplicado em IBM Z.


Pattern 16 — Bulk Processing

O Batch inteiro utiliza esse conceito.

Ao invés de:

Abre

↓

Lê

↓

Fecha

↓

Abre

↓

Lê

↓

Fecha

Processa milhares de registros em sequência.

Economiza I/O.


Pattern 17 — Retry Queue

Muito usado em MQ.

Mensagem falhou.

Não descarta.

Envia para outra fila.

Depois tenta novamente.


Pattern 18 — Checkpoint Restart

Um dos maiores Patterns do Mainframe.

Imagine:

Batch de oito horas.

Faltam cinco minutos.

Acabou energia.

Sem Checkpoint:

Começa do zero.

Com Checkpoint:

Continua do último ponto.

É um dos grandes diferenciais do IBM Z.


Pattern 19 — Producer / Consumer

Quem produz dados.

Quem consome dados.

COBOL

↓

MQ

↓

Java

↓

API

↓

Analytics

Todos independentes.


Pattern 20 — Pipeline

Muito utilizado em processamento Batch.

Entrada

↓

Validação

↓

Transformação

↓

Enriquecimento

↓

Saída

Cada programa faz apenas uma etapa.

É mais simples.

Mais rápido.

Mais reutilizável.


Patterns invisíveis do próprio z/OS

O interessante é que o próprio IBM Z foi construído usando Patterns.

CICS Transaction Routing.

Workload Manager.

JES2.

VTAM.

RACF Exit.

SMF Exit.

DFSORT.

Todos utilizam padrões arquiteturais extremamente sofisticados.


A origem dos Patterns modernos

Muito antes da Engenharia de Software falar sobre Design Patterns, Christopher Alexander, arquiteto, observava que cidades bem planejadas repetiam soluções eficientes para problemas semelhantes. Sua ideia de uma "linguagem de padrões" inspirou pesquisadores da computação. Em 1994, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides — conhecidos como Gang of Four (GoF) — consolidaram 23 padrões clássicos para software orientado a objetos.

Enquanto isso, no universo IBM Mainframe, equipes de bancos, seguradoras e governos já aplicavam conceitos equivalentes, ainda que com outros nomes. Um programa "modelo", uma rotina padronizada de tratamento de erros ou um módulo único de acesso ao DB2 eram, na prática, padrões de projeto antes mesmo da terminologia se popularizar.


Como identificar um Pattern no seu programa?

Faça estas perguntas:

  • Este problema aparece frequentemente?

  • Já resolvi isso antes?

  • Outros programas fazem igual?

  • Posso reutilizar essa solução?

  • O código ficará mais simples para outro desenvolvedor entender?

Se a resposta for "sim" para várias delas, provavelmente existe um Pattern adequado.


Patterns e qualidade de software

Um bom Pattern não existe para deixar o código "bonito". Ele existe para aumentar a qualidade do software.

Entre os principais ganhos estão:

  • Legibilidade: novos desenvolvedores entendem o fluxo rapidamente.

  • Manutenibilidade: alterações ficam concentradas em pontos específicos.

  • Reutilização: menos código duplicado significa menos defeitos.

  • Testabilidade: módulos menores são mais fáceis de validar.

  • Escalabilidade: novas funcionalidades podem ser adicionadas sem grandes reescritas.

  • Confiabilidade: sistemas críticos tornam-se mais previsíveis.

Em ambientes corporativos, onde aplicações COBOL permanecem em produção por décadas, esses benefícios representam economia de milhares de horas de manutenção.


Curiosidades

Algumas curiosidades surpreendem quem está começando:

  • O comando PERFORM incentiva naturalmente a modularização, muito antes das linguagens modernas popularizarem métodos e funções.

  • O COPYBOOK pode ser visto como uma forma primitiva de reutilização estrutural.

  • O EXEC CICS LINK lembra uma chamada para um serviço.

  • O EXEC SQL separa regras de negócio do acesso aos dados, aproximando-se do Repository Pattern.

  • Frameworks internos criados por grandes bancos nos anos 1980 já padronizavam logs, tratamento de erros, auditoria e segurança, antecipando conceitos que hoje aparecem em arquiteturas modernas.


Dicas para um Padawan COBOL

Se você está iniciando sua jornada no IBM Z, adote alguns hábitos desde cedo:

  1. Nunca escreva um parágrafo com centenas de linhas. Divida em pequenas responsabilidades.

  2. Evite duplicar lógica de negócio. Se duas rotinas fazem a mesma coisa, considere criar um módulo reutilizável.

  3. Prefira nomes claros para seções e parágrafos. Eles documentam o fluxo naturalmente.

  4. Centralize acesso a banco, VSAM e APIs sempre que possível.

  5. Trate erros de forma consistente em todos os programas.

  6. Pense na próxima pessoa que fará manutenção — talvez seja você daqui a cinco anos.


O impacto na carreira

Dominar Design Patterns diferencia um programador que apenas escreve código de um profissional capaz de projetar soluções.

Durante entrevistas técnicas, é comum que arquitetos e líderes valorizem candidatos que demonstrem organização, modularidade e preocupação com manutenção. Esses profissionais costumam evoluir para funções como Desenvolvedor Sênior, Líder Técnico, Arquiteto de Soluções ou Especialista IBM Z.

Além disso, ao aprender Patterns você desenvolve uma habilidade valiosa: enxergar problemas de forma abstrata. Essa capacidade facilita a transição entre COBOL, Java, Python, C#, Go ou qualquer outra linguagem, pois os conceitos permanecem os mesmos.


O Holocron Final

O jovem Padawan costuma acreditar que programar significa apenas fazer o sistema funcionar.

O Cavaleiro Jedi já entende que fazer funcionar é apenas o começo.

O Mestre sabe que um software corporativo precisa sobreviver a mudanças de regras, novas integrações, fusões de empresas, atualizações de hardware e décadas de manutenção. Ele escreve código pensando não apenas na execução de hoje, mas na equipe que dará continuidade ao projeto amanhã.

Os Design Patterns representam justamente essa evolução. Eles condensam décadas de experiência acumulada por engenheiros de software, arquitetos e desenvolvedores que descobriram, muitas vezes após cometer inúmeros erros, quais soluções resistem ao teste do tempo. No universo IBM Z, esses princípios estão presentes em praticamente todos os grandes sistemas corporativos, mesmo quando não recebem esse nome.

Para um programador COBOL Padawan, estudar Patterns é muito mais do que decorar termos como Factory, Strategy ou Facade. É aprender a organizar o pensamento, reduzir complexidade, produzir código mais limpo, facilitar testes, diminuir defeitos e tornar a manutenção previsível. É construir programas que outras pessoas consigam compreender, evoluir e confiar.

No Bellacosa Mainframe, acreditamos que o verdadeiro poder do IBM Z não está apenas na velocidade dos processadores ou na robustez do hardware. Está nas pessoas que escrevem software de qualidade. E esse caminho começa com pequenos hábitos: modularizar, reutilizar, documentar bem e escolher padrões adequados para problemas recorrentes.

Quando você domina esses conceitos, deixa de ser apenas um codificador. Torna-se um engenheiro de software capaz de construir sistemas que, assim como o próprio Mainframe, continuam relevantes, confiáveis e elegantes por muitas décadas. Esse é o verdadeiro passo para sair da condição de Padawan e iniciar sua jornada rumo à Maestria no universo COBOL e IBM Z.


domingo, 16 de junho de 2019

☕🔥 DESIGN PATTERNS NO IBM MAINFRAME — O SEGREDO “INVISÍVEL” QUE SEMPRE ESTEVE DENTRO DO COBOL, CICS E DB2

 

Bellacosa Mainframe e o design patterns orientados ao mainframe

☕🔥 DESIGN PATTERNS NO IBM MAINFRAME — O SEGREDO “INVISÍVEL” QUE SEMPRE ESTEVE DENTRO DO COBOL, CICS E DB2

Muita gente olha para Design Patterns e pensa imediatamente em:

  • Java

  • Spring

  • Microservices

  • APIs modernas

  • Orientação a Objetos

Mas existe uma ironia histórica gigantesca aqui:

👉 O Mainframe já utilizava vários conceitos de Design Patterns ANTES MESMO DO TERMO “DESIGN PATTERN” VIRAR MODA.

Sim.

Muito do que a Gang of Four formalizou em 1994 já existia de forma arquitetural em:

  • CICS

  • IMS

  • JES2

  • VTAM

  • RACF

  • COBOL corporativo

  • Batch Processing

  • Transaction Processing

O programador mainframe veterano talvez nunca tenha chamado isso de “Factory”, “Facade” ou “Template Method”…

…mas ele já aplicava esses conceitos há décadas.

E aqui está a verdade que poucos falam:

🔥 O Mainframe é provavelmente um dos ambientes que MAIS UTILIZA padrões arquiteturais de forma disciplinada.


☕ O QUE É UM DESIGN PATTERN DE VERDADE?

Design Pattern não é código pronto.

É:

Uma solução recorrente para um problema recorrente.

É experiência transformada em arquitetura.

É o equivalente computacional de:

  • engenharia civil

  • arquitetura predial

  • aviação

  • medicina

Porque sistemas gigantes NÃO sobrevivem sem padrões.

E adivinha qual ambiente mais precisava disso?

👉 O Mainframe.

Porque ele sempre lidou com:

  • milhões de transações

  • altíssima disponibilidade

  • integridade financeira

  • processamento distribuído

  • desacoplamento

  • segurança crítica

  • integração entre sistemas legados


☕ 1. SINGLETON — O “ÚNICO RECURSO” DO MAINFRAME

No mundo OO:

O Singleton garante apenas uma instância da classe.

No Mainframe?

Isso existe desde os primórdios.

Exemplos clássicos:

🔹 JES2

Existe apenas:

  • um spool manager central

  • um checkpoint principal

  • um controlador global

Isso é comportamento Singleton.


🔹 ENQ/DEQ

Controle exclusivo de recurso.

Exemplo:

EXEC CICS ENQ
     RESOURCE('CLIENTE001')
END-EXEC

O sistema garante:

  • uma única posse do recurso

  • integridade transacional

Isso é Singleton aplicado a lock de recurso.


🔹 DB2 Subsystem

Um subsystem DB2:

DB2P
DB2T
DB2D

atua como entidade centralizada.

Toda aplicação referencia a mesma infraestrutura lógica.


☕ 2. FACTORY METHOD — O MAINFRAME CRIA OBJETOS HÁ DÉCADAS

No Java:

Factory cria objetos sem expor a implementação.

No Mainframe:

isso aparece MUITO em arquiteturas transacionais.


🔥 Exemplo clássico: CICS Transaction Routing

Usuário chama:

TRN1

Mas o CICS decide:

  • qual programa carregar

  • qual região executar

  • qual recurso utilizar

O chamador não conhece a implementação real.

Isso é Factory.


Outro exemplo:

Dynamic CALL COBOL

CALL WS-PGM-NAME USING AREA.

O programa chamado é decidido dinamicamente.

Isso desacopla:

  • lógica

  • implementação

  • versão

Exatamente como Factory Method.


☕ 3. BUILDER — O JCL É UM BUILDER GIGANTE

Essa talvez exploda a mente de muita gente.

O JCL inteiro é praticamente um padrão Builder.

Por quê?

Porque ele monta um processamento complexo passo a passo.


Veja isso:

//STEP1 EXEC PGM=SORT
//STEP2 EXEC PGM=IDCAMS
//STEP3 EXEC PGM=IEFBR14

Cada STEP constrói parte do processo final.


O Builder no Mainframe:

  • constrói pipelines batch

  • monta datasets

  • prepara ambientes

  • cria fluxos de ETL

  • organiza utilitários

O resultado final é “montado” progressivamente.

Exatamente o conceito Builder.


☕ 4. ADAPTER — O REI ABSOLUTO DAS INTEGRAÇÕES

Se existe um pattern que domina o Mainframe…

é Adapter.

Porque o Mainframe SEMPRE precisou conversar com mundos diferentes.


🔥 Exemplos históricos:

EBCDIC ↔ ASCII

Conversão clássica.

Adapter puro.


COBOL ↔ JSON

Hoje usamos:

  • z/OS Connect

  • CICS Web Services

  • IBM MQ

  • API Connect

Tudo isso são adapters modernos.


VTAM ↔ TCP/IP

O Mainframe adaptou protocolos antigos ao mundo IP.

Isso é engenharia absurda.


☕ 5. DECORATOR — O CICS FAZ ISSO O TEMPO TODO

Decorator adiciona comportamento sem alterar o núcleo.

CICS faz isso há décadas.


Exemplos:

Monitoring exits

Você adiciona:

  • auditoria

  • tracing

  • logging

  • segurança

sem alterar a aplicação original.


RACF Exit

Você “decora” autenticação.

O núcleo continua igual.


☕ 6. FACADE — O CICS É UMA FACADE MONSTRUOSA

O usuário faz:

EXEC CICS READ

Mas por trás existe:

  • VSAM

  • locking

  • journaling

  • recovery

  • buffer pools

  • syncpoint

  • dispatching

O CICS simplifica toda a complexidade.

Isso é literalmente Facade.


☕ 7. PROXY — A ALMA DO PROCESSAMENTO DISTRIBUÍDO

Proxy controla acesso a outro objeto.

O Mainframe faz isso desde os anos 70.


Exemplos:

Distributed Program Link (DPL)

Programa local chama remoto como se fosse local.

Isso é Proxy puro.


MQ

Fila representa comunicação indireta.

Você não fala diretamente com o sistema remoto.

Existe um intermediário.


☕ 8. COMPOSITE — JES2 E SPOOL

Composite trata grupos e indivíduos igualmente.

O JES2 faz isso magistralmente.


JOB → STEPS → DDs

Hierarquia perfeita:

JOB
 ├── STEP
 │    ├── DD

Estrutura em árvore.

Exatamente Composite.


☕ 9. OBSERVER — O MAINFRAME SEMPRE FOI EVENT-DRIVEN

Muito antes do termo “event streaming”.


Exemplos:

WTO/WTOR

Eventos geram reações.


SMF

Subsistemas “observam” eventos do sistema.


Automation (NetView / System Automation)

Mensagens disparam ações automáticas.

Observer clássico.


☕ 10. STRATEGY — O SORT É UMA AULA DE DESIGN PATTERN

Você muda estratégia sem alterar o fluxo principal.


DFSORT

Dependendo dos parâmetros:

SORT FIELDS=
OPTION COPY
SUM FIELDS=

o mecanismo muda completamente.

Mesmo motor.

Estratégias diferentes.


☕ 11. COMMAND — O UNIVERSO OPERACIONAL

Mainframe é praticamente uma civilização baseada em Command Pattern.


Exemplos:

MVS Commands

D A,L
P JOB123
CEMT I TASK

Cada comando encapsula:

  • ação

  • parâmetros

  • execução


☕ 12. ITERATOR — VSAM E DB2

Iterator percorre coleções.

Mainframe nasceu fazendo isso.


COBOL Sequential Read

READ ARQ NEXT RECORD

DB2 Cursor

FETCH NEXT

Iterator clássico.


☕ 13. STATE — O CICS É OBCECADO POR ESTADO

Estados mudam comportamento.

CICS inteiro vive disso.


Transações:

  • Enabled

  • Disabled

  • Quiesced

  • Purged


Tasks:

  • Running

  • Waiting

  • Suspended

Cada estado altera comportamento do sistema.


☕ 14. TEMPLATE METHOD — O DNA DO COBOL CORPORATIVO

Talvez o mais usado de todos.


Estrutura clássica:

1000-INICIO.
2000-PROCESSA.
3000-FINALIZA.

Framework fixo.

Etapas customizáveis.


Batch corporativo inteiro usa isso

  • abertura

  • validação

  • processamento

  • commit

  • fechamento

Template Method puro.


☕ 15. CHAIN OF RESPONSIBILITY — O MAINFRAME É UMA CADEIA GIGANTE

Request passa por múltiplos componentes.


Fluxo real:

TSO
 ↓
RACF
 ↓
JES2
 ↓
WLM
 ↓
DB2
 ↓
CICS

Cada camada decide:

  • tratar

  • validar

  • encaminhar

  • rejeitar

Isso é Chain of Responsibility em escala industrial.


☕🔥 A GRANDE VERDADE QUE NINGUÉM CONTA

O Mainframe não ficou ultrapassado.

O que aconteceu foi:

👉 A indústria moderna reaprendeu conceitos que o Mainframe já dominava há décadas.

Quando alguém fala:

  • microservices

  • event driven

  • observability

  • middleware

  • transaction manager

  • resilience

  • orchestration

…o profissional mainframe experiente muitas vezes pensa:

“Nós já fazíamos isso nos anos 80.”

E não é arrogância.

É história da computação.


☕🔥 O MAIOR ERRO DOS NOVOS PROFISSIONAIS

Muitos estudam Design Patterns apenas em:

  • Java

  • C#

  • Python

Mas ignoram o ambiente onde esses conceitos foram colocados à prova em escala planetária.

Porque é fácil fazer pattern em sistema pequeno.

Difícil é fazer funcionar:

  • em banco

  • bolsa de valores

  • governo

  • aviação

  • seguradoras

  • telecom

  • processamento mundial

por 40 anos sem parar.

O Mainframe fez isso.


☕🔥 CONCLUSÃO — O MAINFRAME NÃO É “LEGADO”

Ele é:

Engenharia sobrevivente.

Cada pattern desses dentro do z/OS nasceu de necessidade real:

  • performance

  • segurança

  • disponibilidade

  • recuperação

  • escalabilidade

  • integridade

E talvez essa seja a maior lição do Mainframe para a computação moderna:

🔥 “Arquitetura boa não é a mais bonita.
É a que continua funcionando décadas depois.”