Translate

Mostrar mensagens com a etiqueta Design Patterns. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Design Patterns. Mostrar todas as mensagens

quinta-feira, 2 de julho de 2026

Dos Cartões Perfurados ao Enterprise COBOL: A Evolução do STOP RUN e do GOBACK

 

Bellacosa Mainframe e as diferencas entre o goback e o stop run


Dos Cartões Perfurados ao Enterprise COBOL: A Evolução do STOP RUN e do GOBACK

Essa é uma excelente pergunta, e a resposta curta é:

Hoje, em projetos modernos de Enterprise COBOL para z/OS, a IBM e a maioria das empresas recomendam usar GOBACK em vez de STOP RUN. Não é apenas modismo; existem razões técnicas, arquiteturais e de reutilização do ambiente de execução (Language Environment). (IBM)

Vamos analisar como um arquiteto de Mainframe faria.


A origem do STOP RUN

Quando COBOL surgiu na década de 1960, praticamente todos os programas eram executados diretamente pelo sistema operacional.

O fluxo era simples:

JCL
 │
 ▼
Programa COBOL
 │
STOP RUN
 │
 ▼
MVS

Naquela época:

  • não existiam APIs REST;

  • não existiam aplicações reutilizáveis;

  • praticamente não existiam subprogramas complexos;

  • o programa começava e terminava.

O STOP RUN fazia exatamente isso:

"Acabei. Pode encerrar tudo."


O surgimento do GOBACK

Com o crescimento dos sistemas apareceram:

  • subprogramas

  • bibliotecas

  • módulos reutilizáveis

  • CICS

  • IMS

  • DB2

  • Language Environment (LE)

Agora um programa não era mais necessariamente o "programa principal".

Exemplo:

JCL

  MAIN01

     │

 CALL CLIENTE

     │

 CALL CALCJURO

     │

 CALL VALIDA

Imagine se CALCJURO executasse:

STOP RUN

O que aconteceria?

Toda a aplicação terminaria imediatamente.

Não apenas o módulo.

Todo o Run Unit.

É exatamente isso que a IBM documenta. STOP RUN termina toda a Run Unit; já GOBACK retorna ao chamador quando usado em um programa chamado. (IBM)


A grande diferença

STOP RUN

Programa

↓

encerra TODA a Run Unit

↓

retorna ao sistema operacional

GOBACK

Programa

↓

retorna para quem chamou

↓

continua a execução

Se o programa for o principal:

GOBACK

↓

faz praticamente o mesmo trabalho do STOP RUN

A IBM afirma isso explicitamente:

Em um programa principal, GOBACK funciona como STOP RUN. Em um subprograma, GOBACK funciona como EXIT PROGRAM. (IBM)


Exemplo prático

Programa principal

MAIN
CALL "A"

DISPLAY "FIM"

STOP RUN

Programa A

DISPLAY "A"

STOP RUN

Resultado

A

O DISPLAY "FIM"

nunca acontece.


Agora usando GOBACK

Programa A

DISPLAY "A"

GOBACK

Resultado

A

FIM

Porque voltou para o MAIN.


Então por que muitas empresas proíbem STOP RUN?

Não porque ele esteja errado.

Mas porque ele cria risco.

Imagine um programa hoje.

Batch

↓

Framework

↓

Biblioteca

↓

Serviço

↓

Seu Programa

Você nem sempre sabe quem chamou seu módulo.

Se usar

STOP RUN

você encerra toda a aplicação.

Se usar

GOBACK

o programa simplesmente devolve o controle.

Muito mais seguro.


O princípio da reutilização

Hoje escrevemos programas para serem reutilizados.

Um módulo pode ser chamado por:

  • Batch

  • CICS

  • IMS

  • API REST

  • MQ

  • Java

  • z/OS Connect

  • outro COBOL

O módulo não deve assumir que é o "dono" da aplicação.

Ele apenas faz seu trabalho.

Depois devolve o controle.

Isso é exatamente o comportamento do GOBACK.


O impacto no Language Environment (LE)

Aqui está uma das razões mais importantes.

O Enterprise COBOL roda sobre o Language Environment (LE).

O LE controla:

  • memória

  • pilha

  • heap

  • tratamento de exceções

  • inicialização

  • reutilização do runtime

Quando ocorre

STOP RUN

o LE encerra o Run Unit.

Quando ocorre

GOBACK

ele apenas retorna ao chamador.

Isso permite reutilizar o ambiente de execução em muitos cenários. (IBM)


O caso do RTEREUS

Pouca gente conhece essa opção.

Existe um parâmetro do LE chamado

RTEREUS

(Runtime Reuse)

Ele permite reutilizar o ambiente de execução COBOL.

A IBM afirma claramente:

Para obter os benefícios do RTEREUS, substitua STOP RUN por GOBACK. STOP RUN encerra o ambiente reutilizável. (IBM)

Ou seja:

STOP RUN

↓

destrói o ambiente

↓

novo ambiente precisa ser criado

Enquanto

GOBACK

↓

reutiliza o ambiente

↓

menos overhead

Performance

O ganho normalmente não é enorme em um programa isolado.

Mas imagine milhares de execuções por minuto.

1000 programas

↓

cada um recria o Runtime

↓

mais CPU

Com reutilização:

Runtime permanece ativo

↓

menos inicialização

↓

menos CPU

É exatamente por isso que grandes bancos adotam GOBACK como padrão.


E no CICS?

No CICS normalmente termina-se com

EXEC CICS RETURN

e não com

STOP RUN

porque quem controla a aplicação é o CICS.

O mesmo raciocínio vale para IMS.

O programa devolve o controle ao ambiente.

Não encerra a Run Unit.


Um exemplo interessante: DFSORT

A IBM é ainda mais direta na documentação de user exits do DFSORT:

User exits escritos em COBOL não devem usar STOP RUN. Para retornar ao DFSORT, use GOBACK. (IBM)

Ou seja,

STOP RUN

↓

encerra tudo

↓

ERRADO
GOBACK

↓

retorna ao DFSORT

↓

CORRETO

Existe recomendação oficial da IBM?

Sim.

A documentação oficial afirma que:

  • em programas principais, GOBACK tem o mesmo efeito de STOP RUN;

  • em subprogramas, GOBACK retorna ao chamador, enquanto STOP RUN termina toda a Run Unit. (IBM)

Além disso, para ambientes reutilizáveis (RTEREUS), a IBM recomenda trocar STOP RUN por GOBACK. (IBM)

Documentação oficial da IBM:

Minha recomendação para um COBOL Padawan

Se você está desenvolvendo em Enterprise COBOL moderno, adote esta regra simples:

SituaçãoRecomendação
Programa Batch principalGOBACK
Subprograma (CALL)GOBACK
Biblioteca reutilizávelGOBACK
Módulo chamado por Java, CICS, IMS ou APIsGOBACK
Novo desenvolvimentoGOBACK como padrão

Na prática, GOBACK é um superconjunto de STOP RUN: ele faz o papel de STOP RUN quando está no programa principal e o de EXIT PROGRAM quando está em um programa chamado. Isso reduz riscos, melhora a reutilização do runtime e torna o código mais flexível para arquiteturas modernas. Por esse conjunto de vantagens, a preferência atual por GOBACK é muito mais uma decisão de engenharia do que um simples modismo.

Design Patterns no COBOL Mainframe Os Padrões que os Grandes Programadores Sempre Usaram (Mesmo Antes de Eles Receberem um Nome)

 

Bellacosa Mainframe e os design pattern em cobol mainframe

☕ Um Café no Bellacosa Mainframe

Design Patterns no COBOL Mainframe

Os Padrões que os Grandes Programadores Sempre Usaram (Mesmo Antes de Eles Receberem um Nome)

"Todo programador COBOL iniciante acredita que um bom sistema nasce de um bom código. O programador experiente sabe que um bom sistema nasce de boas decisões de arquitetura."

Existe uma curiosidade fascinante na história da computação.

Quando ouvimos falar em Design Patterns, quase todo mundo lembra imediatamente do famoso livro Design Patterns: Elements of Reusable Object-Oriented Software, publicado em 1994 pelo famoso Gang of Four (GoF).

Muitos acreditam que os padrões nasceram ali.

Mas isso não é verdade.

Na realidade, os profissionais de Mainframe utilizavam padrões muito antes de eles receberem nomes elegantes.

Os sistemas bancários dos anos 70, 80 e 90 já possuíam separação de responsabilidades, reutilização de código, módulos especializados, camadas de acesso a banco, mecanismos de validação, tratamento centralizado de erros, componentes compartilhados e arquiteturas extremamente organizadas.

Eles simplesmente não chamavam isso de Pattern.

Chamavam de:

"Boa programação."

E existe um motivo simples.

Quando um sistema precisa sobreviver por 40 anos, processar bilhões de transações e nunca parar, improvisação não funciona.

É por isso que aprender Patterns em COBOL significa aprender como os grandes sistemas do mundo realmente funcionam.

Hoje vamos explorar essa jornada.

Pegue seu café.

Vamos entrar na mente dos arquitetos que construíram os sistemas que movimentam praticamente todo o dinheiro do planeta.


O que é um Pattern?

Pattern significa literalmente:

Padrão de solução.

Não é código.

Não é framework.

Não é biblioteca.

É uma maneira comprovada de resolver um problema recorrente.

Sempre que um problema aparece repetidamente, alguém encontra uma solução elegante.

Depois de milhares de aplicações, essa solução vira um padrão.


A origem dos Patterns

Antes mesmo da computação, um arquiteto chamado Christopher Alexander estudava cidades e construções.

Ele percebeu algo interessante.

As melhores cidades do mundo utilizavam soluções semelhantes para problemas semelhantes.

Uma praça.

Uma rua.

Uma entrada.

Uma janela.

Tudo seguia padrões.

Em 1977 ele publicou:

A Pattern Language.

Décadas depois, programadores perceberam:

"Software também possui problemas repetitivos."

Assim nasceram os Design Patterns modernos.


Mas... e o Mainframe?

Enquanto isso...

Em grandes bancos...

Seguradoras...

Governos...

Empresas aéreas...

Os analistas já utilizavam exatamente a mesma filosofia.

Um exemplo clássico.

Em vez de cada programa acessar DB2 diretamente...

Criava-se um módulo responsável apenas por isso.

Hoje chamaríamos isso de:

DAO Pattern.

Na época era apenas:

"O módulo que conversa com o banco."


Por que Patterns são importantes?

Imagine um hospital.

Você não quer que cada médico invente sua própria forma de operar.

Existe um procedimento.

Uma sequência.

Uma organização.

Software crítico funciona da mesma forma.

Patterns tornam sistemas:

  • previsíveis

  • fáceis de manter

  • fáceis de evoluir

  • seguros

  • reutilizáveis


Pattern 1 — Modularização

O primeiro pattern da história do Mainframe.

Um programa enorme faz tudo.

Depois de alguns anos...

Ninguém entende mais nada.

A solução?

Separar responsabilidades.

Exemplo:

Programa Principal

Validação

Regras de Negócio

DB2

Relatórios

Logs

Cada módulo possui apenas uma função.

Hoje isso parece óbvio.

Na década de 70 era revolucionário.


Como aplicar

Nunca escreva um programa de 5.000 linhas.

Pergunte:

Esta rotina pode virar um subprograma?

Se a resposta for sim...

Faça isso.


Pattern 2 — COPYBOOK Pattern

Uma das maiores invenções do COBOL.

Em vez de repetir estruturas...

Criamos COPYBOOKS.

Exemplo:

Cliente

Conta

Saldo

Endereço

CPF

Esses campos aparecem em centenas de programas.

Sem COPYBOOK...

Bastaria alterar um campo para criar centenas de inconsistências.

Com COPYBOOK...

Uma alteração.

Todos utilizam.


Boas práticas

Nunca copie estruturas manualmente.

Sempre centralize.


Pattern 3 — Validation Layer

Nunca misture validação com regra de negócio.

Errado:

Recebe CPF

Consulta DB2

Calcula juros

Valida CPF

Atualiza saldo

Tudo misturado.

Certo:

Entrada

Validação

Negócio

Persistência


Benefícios

Código mais limpo.

Testes mais simples.

Menos bugs.


Pattern 4 — Error Handler Centralizado

Um clássico absoluto.

Em vez de cada programa escrever mensagens diferentes...

Existe um módulo especializado.

Exemplo:

DISPLAY

ABEND

LOG

RETURN-CODE

Tudo passa por um componente comum.


Vantagens

Padronização.

Auditoria.

Facilidade de suporte.


Pattern 5 — File Access Layer

Em vez de cada programa abrir arquivos VSAM...

Criamos uma camada.

Programa

Arquivo Layer

VSAM

Se amanhã o arquivo virar DB2...

O programa quase não muda.


Isso é desacoplamento

A lógica de negócio não conhece detalhes físicos.

Esse conceito ficou famoso décadas depois.

No Mainframe já era realidade.


Pattern 6 — Database Access Layer

Muito comum em DB2.

Programa

Subprograma SQL

DB2

O programa não conhece SQL.

Conhece apenas serviços.

Exemplo:

Consultar Cliente

Atualizar Saldo

Inserir Conta

Excluir Registro

Muito semelhante aos Repository Patterns modernos.


Pattern 7 — Service Programs

Grandes empresas possuem centenas de programas.

Algumas regras aparecem em todos.

Cálculo de CPF.

Validação de agência.

Máscara.

Data.

Moeda.

Essas regras viram serviços.


Exemplo

CALL "CALCJURO"

CALL "VALIDCPF"

CALL "FORMATA"

CALL "DATAUTIL"

Isso reduz milhares de linhas duplicadas.


Pattern 8 — Dispatcher

Muito usado em CICS.

Um programa recebe uma operação.

Dependendo da função...

Chama outro programa.

Entrada

Dispatcher

Consulta

Inclusão

Alteração

Exclusão

Hoje chamamos isso de Command Dispatcher.


Pattern 9 — Table Driven Programming

Em vez de dezenas de IF...

Utilize tabelas.

Errado:

IF UF = SP

IF UF = RJ

IF UF = MG

...

Melhor:

Tabela de estados.

Pesquisa.

Resultado.

Menos código.

Mais manutenção.


Pattern 10 — Configuration Pattern

Nunca coloque constantes espalhadas.

Crie parâmetros.

Copybooks.

Arquivos.

Tabelas.

Isso evita recompilar programas para pequenas mudanças.


Pattern 11 — Batch Pipeline

Muito usado em processamento noturno.

Leitura

Validação

Transformação

Classificação

Carga

Cada etapa faz apenas uma coisa.

Se uma falhar...

A anterior permanece íntegra.


Pattern 12 — Restart Pattern

Um dos mais importantes.

Imagine um Batch de 8 horas.

Na hora 7 ocorre falha.

Sem Restart...

Tudo começa novamente.

Com Restart...

Continua do último checkpoint.

Essa ideia economiza milhões de dólares todos os anos.


Pattern 13 — Checkpoint Pattern

Muito usado com IMS.

A cada quantidade de registros...

Grava-se um ponto seguro.

Em caso de falha...

Retorna dali.


Pattern 14 — Logging Pattern

Nunca dependa apenas do DISPLAY.

Registre:

Programa

Data

Hora

Usuário

Arquivo

SQLCODE

Chave

Operação

Isso salva equipes inteiras durante incidentes.


Pattern 15 — Retry Pattern

DB2 indisponível?

Arquivo bloqueado?

MQ ocupado?

Em vez de falhar imediatamente...

Tente novamente algumas vezes.

Mas cuidado.

Retry infinito vira desastre.


Pattern 16 — Circuit Breaker (Modernização)

Muito usado via APIs.

Se um serviço externo está indisponível...

Pare de chamá-lo temporariamente.

Evita sobrecarga.


Pattern 17 — Adapter

Muito utilizado na modernização.

Sistema antigo

Adapter

API REST

O COBOL permanece praticamente igual.


Pattern 18 — Facade

Imagine vinte programas acessando vinte módulos.

Complicado.

Criamos uma fachada.

Programa

Facade

Serviços internos

Tudo fica mais simples.


Pattern 19 — Strategy

O cálculo muda conforme o produto.

Em vez de centenas de IF...

Criamos estratégias.

Produto A

Regra A

Produto B

Regra B

Produto C

Regra C


Pattern 20 — Template Process

Muito comum em Batch.

Todos os programas fazem:

Inicialização

Leitura

Processamento

Gravação

Fechamento

Apenas a lógica muda.

A estrutura permanece.


Como identificar quando usar um Pattern

Faça cinco perguntas:

  1. Estou repetindo código?

  2. Esse módulo possui mais de uma responsabilidade?

  3. Se mudar amanhã, quantos programas serão alterados?

  4. Consigo testar isoladamente?

  5. Outra equipe entenderia isso facilmente?

Se várias respostas forem "não"...

Provavelmente existe um Pattern melhor.


Os erros mais comuns dos iniciantes

O famoso "programa monolítico".

Tudo dentro da PROCEDURE DIVISION.

Milhares de linhas.

GO TO para todos os lados.

Variáveis globais.

DISPLAY espalhados.

SQL misturado.

Validação misturada.

Regras misturadas.

Esse tipo de programa funciona...

Até o primeiro incidente em produção.


Como evoluir como Programador COBOL

Existe uma evolução natural.

Nível 1

Aprende sintaxe.

MOVE.

IF.

PERFORM.

READ.

WRITE.


Nível 2

Aprende organização.

Seções.

Parágrafos.

COPYBOOKS.

Subprogramas.


Nível 3

Aprende Patterns.

Reutilização.

Arquitetura.

Modularização.


Nível 4

Aprende integração.

DB2.

CICS.

IMS.

MQ.

REST.

JSON.


Nível 5

Pensa como arquiteto.

Nesse ponto, você não escreve apenas programas.

Você desenha soluções.


Curiosidades

  • Muitos sistemas bancários escritos há mais de 35 anos continuam ativos porque seguiram padrões consistentes.

  • Diversos conceitos popularizados em Java, C# e outras linguagens já eram praticados em ambientes COBOL, ainda que com nomes diferentes.

  • O uso disciplinado de COPYBOOKS foi um dos fatores que permitiu manter aplicações enormes sincronizadas por décadas.

  • Grandes equipes de Mainframe costumam definir padrões internos de nomenclatura, tratamento de erros, chamadas de subprogramas e acesso a dados para reduzir riscos operacionais.


Melhores práticas para o dia a dia

  • Dê a cada programa uma responsabilidade clara.

  • Evite duplicação de lógica.

  • Centralize estruturas em COPYBOOKS.

  • Padronize mensagens de erro.

  • Isole acesso a arquivos e bancos de dados.

  • Documente interfaces de subprogramas.

  • Use nomes consistentes para programas, parágrafos e variáveis.

  • Escreva código pensando em quem fará a manutenção daqui a dez anos.

  • Prefira simplicidade à esperteza.

  • Revise continuamente seu código procurando oportunidades de extrair novos módulos reutilizáveis.


O futuro dos Patterns no Mainframe

O Mainframe moderno conversa com APIs REST, mensageria, microsserviços, Kubernetes, aplicações Java, Python e serviços em nuvem. Nesse cenário, os Patterns clássicos continuam mais relevantes do que nunca. Adapter, Facade, Retry, Circuit Breaker, Service Layer e Repository ajudam a integrar aplicações COBOL com tecnologias modernas sem sacrificar estabilidade.

O profissional que domina esses conceitos deixa de ser apenas um desenvolvedor de programas e passa a ser um engenheiro de soluções. Ele entende quando reutilizar, quando desacoplar, quando encapsular e quando simplificar. Esse conhecimento vale muito mais do que decorar comandos da linguagem.


Conclusão

Existe uma frase muito conhecida entre arquitetos de software:

"Código ruim pode funcionar. Arquitetura ruim cobra juros."

No universo IBM Z, essa cobrança aparece em horas extras, incidentes de produção, dificuldades de manutenção e projetos de modernização cada vez mais caros.

Os Patterns existem justamente para evitar esse cenário. Eles representam décadas de experiência acumulada por milhares de profissionais que enfrentaram os mesmos problemas e encontraram soluções elegantes, reutilizáveis e seguras.

Se você é um Programador COBOL Padawan, não tente memorizar todos os Patterns de uma vez. Comece pelos mais importantes: modularização, COPYBOOKS, validação, tratamento centralizado de erros, acesso a dados desacoplado e reutilização de serviços. À medida que sua experiência crescer, você perceberá que esses padrões aparecem naturalmente em praticamente todos os grandes sistemas corporativos.

Lembre-se: escrever código é uma habilidade. Escrever código que continuará funcionando e sendo compreendido daqui a vinte anos é uma arte. E essa arte é construída com disciplina, boas práticas e padrões sólidos.

No Bellacosa Mainframe, costumamos dizer que o verdadeiro poder de um Programador COBOL não está na quantidade de comandos que ele conhece, mas na qualidade das decisões que toma antes mesmo de começar a digitar a primeira linha de código.

Esse é o caminho que transforma um Padawan em um verdadeiro Mestre do Mainframe.

Se desejar, posso criar a Parte 2 com mais de 3.000 palavras, abordando 40+ Design Patterns específicos para COBOL, CICS, DB2, IMS, Batch, APIs REST, MQ e modernização no IBM Z, com exemplos completos de código COBOL para cada padrão.


quarta-feira, 20 de maio de 2026

🔥☕ Do COBOL ao Arquiteto Enterprise Por Que Engenharia de Software Virou a Skill Mais Importante Para o Programador Mainframe Moderno

 

Bellacosa Mainframe e topicos de engenharia de software para mainframers


🔥☕ Do COBOL ao Arquiteto Enterprise

Por Que Engenharia de Software Virou a Skill Mais Importante Para o Programador Mainframe Moderno

Existe uma frase silenciosa que ecoa dentro dos grandes bancos, seguradoras e sistemas financeiros do planeta:

“O sistema pode até mudar de interface… mas o COBOL continua sustentando o mundo.”

E isso não é exagero.

Enquanto muita gente acredita que o universo enterprise vive apenas de microservices coloridos, containers e frameworks JavaScript da moda… milhões de transações financeiras continuam atravessando silenciosamente ambientes IBM Z, CICS, DB2 e aplicações COBOL gigantescas que nunca podem parar.

Mas algo mudou.

Muito.

O mercado não procura mais apenas:

  • “quem sabe COBOL”

Hoje o mercado procura:

  • engenheiros de software enterprise.

E existe uma diferença brutal entre essas duas coisas.


☕ O Antigo Programador COBOL

Durante décadas, muitos profissionais cresceram no modelo clássico:

  • alterar rotina

  • corrigir bug

  • compilar

  • subir pacote

  • fechar chamado

O foco era:

  • implementação

  • manutenção

  • operação

E isso funcionou por muito tempo.

Mas o mundo enterprise moderno virou um ecossistema absurdamente mais complexo.

Hoje um simples sistema bancário pode envolver:

  • APIs REST

  • aplicações mobile

  • cloud híbrida

  • microsserviços

  • observabilidade

  • CI/CD

  • autenticação distribuída

  • mensageria

  • integração em tempo real

  • analytics

  • IA

E no meio disso tudo…

o COBOL continua lá.

Silencioso.

Processando.

Confiável.


🏗️ O Que é Engenharia de Software de Verdade?

Muita gente acha que engenharia de software é:

  • aprender framework

  • decorar design pattern

  • usar UML

Mas engenharia de software é algo muito maior.

Ela existe para resolver um problema fundamental:

Como construir sistemas gigantes sem criar caos?

Porque sistemas enterprise crescem.

E crescem rápido.

Sem arquitetura:

  • o sistema vira espaguete

  • manutenção explode

  • bugs aumentam

  • deploys quebram produção

  • integração vira pesadelo

A engenharia surge para controlar complexidade.


🧱 Arquitetura Não É Luxo. É Sobrevivência.

O programador júnior normalmente olha para:

  • programas

  • copybooks

  • tabelas

  • jobs

O arquiteto olha para:

  • ecossistemas

  • fluxos

  • dependências

  • escalabilidade

  • disponibilidade

  • integração

Essa mudança de mentalidade é gigantesca.

Um banco não sobrevive décadas apenas porque tem “código”.

Ele sobrevive porque existe:

  • arquitetura

  • organização

  • separação de responsabilidades

  • governança

E curiosamente…

o mundo mainframe sempre fez isso muito antes da cloud existir.


☕ O Mainframe Já Pensava Como Cloud Décadas Atrás

Esse talvez seja um dos maiores segredos da computação enterprise.

Muitos conceitos vendidos hoje como “modernos” já existiam no ecossistema IBM há décadas.

Veja isso:

Mundo ModernoMainframe Enterprise
Alta disponibilidadeSysplex
Load BalancingCICSPlex
APIsz/OS Connect
TransactionsCICS
ObservabilidadeOMEGAMON
Segurança centralizadaRACF
MensageriaMQ

Ou seja…

o IBM Z nunca ficou ultrapassado.

O que aconteceu foi:

  • a interface mudou

  • o marketing mudou

  • o nome mudou

Mas os fundamentos de engenharia continuaram fortíssimos.


⚔️ O Problema do “Só Saber Programar”

Existe um erro muito comum entre iniciantes.

Acreditar que carreira se resume a:

  • linguagem

  • sintaxe

  • framework

Mas linguagens mudam.

Frameworks morrem.

Hypes desaparecem.

O que permanece é:

  • arquitetura

  • modelagem

  • design

  • integração

  • capacidade analítica

É exatamente por isso que engenheiros experientes continuam relevantes por décadas.

Eles entendem sistemas.

Não apenas ferramentas.


🧩 Design Patterns: O Conhecimento Condensado dos Veteranos

Quando um júnior vê:

  • Factory

  • Singleton

  • Observer

  • Strategy

ele normalmente pensa:

“isso parece complicado”

Mas design patterns são apenas soluções repetidas para problemas repetidos.

Eles nasceram porque grandes sistemas começaram a enfrentar:

  • acoplamento

  • manutenção impossível

  • crescimento descontrolado

  • dependências caóticas

Então engenheiros começaram a criar padrões reutilizáveis.

E isso mudou a indústria.

No fundo:

  • design patterns

  • clean code

  • arquitetura em camadas

  • UML

são tentativas humanas de controlar complexidade.


🧠 Clean Code Não É Frescura

Muitos sistemas COBOL antigos sofrem não por causa da idade.

Mas por causa da falta de engenharia.

Código ruim custa:

  • dinheiro

  • tempo

  • performance

  • estabilidade

  • saúde mental

E isso vale para qualquer linguagem.

Um programa COBOL bem escrito pode durar décadas.

Um programa moderno mal escrito pode virar lixo em seis meses.

A diferença está na engenharia.


🌐 O Novo COBOL Está Conectado

Hoje o programador mainframe moderno precisa entender:

  • APIs REST

  • JSON

  • integração

  • cloud híbrida

  • DevOps

  • pipelines

  • observabilidade

Porque o COBOL moderno não vive mais isolado.

Agora ele conversa com:

  • mobile

  • fintechs

  • microsserviços

  • IA

  • analytics

  • cloud pública

O COBOL deixou de ser “backoffice”.

Ele virou parte do ecossistema digital global.


🚀 DevOps Chegou ao IBM Z

Durante muito tempo existiu um mito:

“Mainframe não acompanha DevOps.”

Hoje isso caiu completamente.

O ecossistema IBM já possui:

  • Git

  • CI/CD

  • automação

  • pipelines

  • testes automatizados

  • observabilidade moderna

  • integração cloud-native

Ferramentas como:

  • Zowe

  • Jenkins

  • UrbanCode

  • GitHub

  • OpenShift

aproximaram ainda mais o IBM Z do universo moderno.


☕ O Que o Mercado Espera Agora?

O mercado não procura mais apenas:

  • operador

  • codificador

  • executor de tarefas

Ele procura:

  • solucionadores de problemas

O profissional valioso hoje entende:

  • negócio

  • arquitetura

  • integração

  • confiabilidade

  • escalabilidade

  • comunicação

E aqui existe uma vantagem absurda para quem vem do mainframe.

Porque poucos ambientes ensinam:

  • sistemas críticos

  • alta disponibilidade

  • milhões de transações reais

  • tolerância zero para falhas

O programador COBOL enterprise já nasce perto de problemas gigantes.


🧭 O Roadmap do Programador COBOL Moderno

A evolução natural hoje passa por:

Base

  • COBOL

  • JCL

  • VSAM

  • SDSF

Intermediário

  • DB2

  • CICS

  • SQL

  • MQ

Modernização

  • APIs

  • JSON

  • REST

  • Git

  • DevOps

Engenharia

  • Arquitetura

  • Design Patterns

  • UML

  • Observabilidade

  • Segurança

Próximo nível

  • Cloud híbrida

  • SRE

  • Performance

  • Integração distribuída

  • Engenharia enterprise


🔥 O Grande Erro do Mercado

Enquanto muitos perseguem apenas:

  • hype

  • frameworks

  • modinhas

o mundo enterprise continua valorizando:

  • confiabilidade

  • estabilidade

  • engenharia sólida

E é exatamente aí que o profissional IBM Z moderno pode se tornar raro.

Porque ele entende:

  • legado

  • missão crítica

  • integração

  • arquitetura real


☕ O Futuro Não Está Escolhendo Entre COBOL ou Cloud

O futuro está integrando os dois.

Os sistemas modernos não vão substituir completamente o mainframe.

Eles vão conversar com ele.

Porque no final:

  • o aplicativo pode mudar

  • a interface pode mudar

  • a cloud pode mudar

Mas alguém ainda precisa garantir:

  • consistência

  • transação

  • segurança

  • disponibilidade

E silenciosamente…

o IBM Z continua fazendo isso melhor do que quase qualquer outra plataforma do planeta.


🔥☕ Conclusão Bellacosa Mainframe

O programador COBOL que entender engenharia de software deixará de ser apenas:

  • “o cara do legado”

e começará a se tornar:

  • arquiteto

  • integrador

  • especialista enterprise

  • engenheiro de sistemas críticos

Porque no final…

o verdadeiro diferencial nunca foi apenas a linguagem.

Sempre foi:

entender como sistemas gigantes funcionam.

 

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