Translate

Mostrar mensagens com a etiqueta Facade. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Facade. Mostrar todas as mensagens

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.”