André Carlucci

Skeptic .net development

Joe! Tenho um novo projeto pra você… Joe encara seu pior pesadelo, retornar ao passado sombrio do ASP…

Estávamos aqui pesquisando e-mails antigos e lembramos do JOE, uma entidade-programador que perambulava pela Way2 nos primórdios da humanidade. Uma época sombria, de linguagens anciãs e código cheio de notação húngara (afff!).

Não resisti à nostalgia e postei este e-mail que enviei para nossa lista de dev no início de 2007, contando uma das aventuras de nosso herói. Segue o original:


From: André Theodoro Carlucci [mailto:andre.carlucci@way2.com.br]
Sent: quinta-feira, 15 de março de 2007 11:38
To: grupo@way2.com.br
Cc: ‘Rubem Dias’
Subject: Joe! Tenho um novo projeto pra você… Joe encara seu pior pesadelo, retornar ao passado sombrio do ASP…

A história aqui embaixo é uma obra de ficção. Qualquer semelhança com a realidade é mera coincidência (ou não).

Joe nunca esteve tão feliz. Pegava 3 a 4 tickets no TRAC a cada dia e os resolvia antes do almoço. Desenvolver em DotNet (Bem vindos ao futuro) era tão rápido e divertido que as vezes ele trocava o happy hour da empresa para continuar seu novo sistema de procura de senhas de sites pornográficos na web. Passava a tarde jogando Doom3 e Age of Empires, alternando para o www.sandrinha.com.br em olhadelas rápidas e claro, sempre com o dedo no alt+tab.

Um dia seu chefe o chama em sua sala. Joe, pensa: “Finalmente devem ter lido meu pedido de aumento de salário de 3 anos atrás, já era hora! Agora vou poder comprar meu playstation 3.” Joe caminha todo serelepe pelo corredor, bate na porta e escuta:

Chefe: Entra seu molóide!
Joe: Bom dia chefe.
Chefe: Joe, entrou um projeto-bucha novo, pra gente atualizar um Sistema muito antigo. Ouvi dizer que está desenvolvendo um pouco mais rápido que as outras lesmas desta empresa e resolvi te jogar no fogo. É um projeto em ASP.
Joe: O que é ASP, chefe?
Chefe: Também não sei, minha empregada tinha isto no currículo, achei que era marca de sabão. De qualquer forma, é um problema seu, acesse o TRAC e resolva todos os tickets do projeto até segunda-feira.
Joe: Mas chefe, hoje é sexta!

Um olhar de “O que diabos eu tenho a ver com isso?” levou Joe de volta à seu cubículo. Olhando na wikipédia, Joe descobre que ASP era uma linguagem de programação antiga, antes do Cobol e Fortran, que ficou famosa depois de ser utilizada em sistemas para contagem de escravos no Egito antigo.

Joe começa seu trabalho pegando um ticket para criação de um formulário de cadastro de contratos. Rapidamente, cria a tabela de contratos no Oracle. Joe percebe que vai perder seu almoço depois de em vão tentar usar o Way2CRUD para automatizar o processo de acesso ao banco. Uma lágrima de saudade escorre no canto de seu olho. Após criar as procedures com o Way2Coder (ufa!), Joe tem que criar todas as procedures no ASP ainda.

Horas depois, Joe cria o formulário de cadastro. Ao submete-lo, Joe lembra-se que precisa mapear todas as 26 variáveis do Form para variáveis locais, para chamar a procedure de cadastro. Joe começa:

[vb]
v_str_nome = Request.Form(“str_nome”)
v_cd_agente_vendedor = Request.Form(“cd_agente_vendedor”)
v_str_resolucao = Request.Form(“str_resolucao”)

[/vb]

Joe percebe outra lágrima escorrendo do canto de seu olho, aquela saudade do WFormWrapper, que faria tudo isso em 2 linhas…

Nisso Joe lembra que quando for fazer a edição dos contratos, terá que passar mais horas fazendo tarefas como:

[vb]
v_str_nome = resultado(0,0)
v_cd_tipo_contrato_ccee = resultado(1,0)
v_str_tipo_contrato_ccee = resultado(2,0)

v_cd_indicador = resultado(28,0)
[/vb]

Ai se mudar um bem no meio…

Joe sente-se retornando a sua vida miserável e em um momento de desespero, digita no google as palavras: “Egito antigo, ASP, No pain”. Joe se impressiona com o resultado, acha uma figura com hierogrifos de pessoas felizes programando e uma palavra escrita embaixo: REKCUFREHTOMXELA. Joe repete a palavra em voz baixa, quando percebe seu outlook com a mensagem: “You have new mail”. Um e-mail sem remetente, com o subject: “Bem vindo ao futuro”.

Joe mais uma vez sente a gota de lágrima descendo no canto de seu olho, mais uma vez os deuses o ajudaram. Joe abre o arquivo em anexo e na segunda-feira de manhã, tudo estava pronto. FIM.

O QUE DIABOS TINHA NO E-MAIL????

Joe descobre a ancient-evil-art de escrever código com código. Como o ASP não é uma linguagem compilada e sim interpretada, é possível gerar código ASP utiliazando código ASP para ser executado em runtime. Pra você também? O que Joe recebeu no e-mail foi a classe VovoWrapper. Um parente antigo do moderno WFormMapper, de uma época que as coisas eram resolvidas com magia e não com tecnologia. Vamos dar uma olhada no código do Joe antes e depois de utilizar o VovoWrapper.

1 – Código para receber as variáveis do FORM.
Antes:

[vb]
v_str_nome = Request.Form(“str_nome”)
v_cd_agente_vendedor = Request.Form(“cd_agente_vendedor”)
v_str_resolucao = Request.Form(“str_resolucao”)
v_dt_homologacao_aneel = Request.Form(“dt_homologacao_aneel”)
v_dt_reajuste_tarifa = Request.Form(“dt_reajuste_tarifa”)
v_dt_base_reajuste_tarifa = Request.Form(“dt_base_reajuste_tarifa”)
v_cd_indicador = Request.Form(“cd_indicador”)
v_dt_inicio_vigencia = Request.Form(“dt_inicio_vigencia”)
v_dt_fim_vigencia = Request.Form(“dt_fim_vigencia”)
v_num_codigo_ccee = Request.Form(“num_codigo_ccee”)
v_codigo_sap_21 = Request.Form(“codigo_sap_21”)
v_codigo_sap_31 = Request.Form(“codigo_sap_31”)
v_dt_inicio_suprimento = Request.Form(“dt_inicio_suprimento”)
v_dt_fim_suprimento = Request.Form(“dt_fim_suprimento”)
v_cd_status_contrato = Request.Form(“cd_status_contrato”)
v_cd_submercado_compra = Request.Form(“cd_submercado_compra”)
v_cd_submercado_venda = Request.Form(“cd_submercado_venda”)
v_cd_submercado_entrega = Request.Form(“cd_submercado_entrega”)
v_str_observacao = Request.Form(“str_observacao”)
v_cd_indicador = Request.Form(“cd_indicador”)
[/vb]

Depois:

[vb]
Dim v
Set v = new VovoWrapper
v.SetFormVariables
[/vb]

2 – Código para receber as variáveis de uma consulta do banco.
Antes:
[vb]
v_str_nome = resultado(0,0)
v_cd_tipo_contrato_ccee = resultado(1,0)
v_str_tipo_contrato_ccee = resultado(2,0)
v_cd_agente_comprador = resultado(3,0)
v_cd_agente_vendedor = resultado(5,0)
v_str_resolucao = resultado(7,0)
v_dt_homologacao_aneel = resultado(8,0)
v_dt_reajuste_tarifa = resultado(9,0)
v_dt_inicio_vigencia = resultado(10,0)
v_dt_fim_vigencia = resultado(11,0)
v_num_codigo_ccee = resultado(12,0)
v_codigo_sap_21 = resultado(13,0)
v_codigo_sap_31 = resultado(14,0)
v_dt_inicio_suprimento = resultado(15,0)
v_dt_fim_suprimento = resultado(16,0)
v_cd_status_contrato = resultado(17,0)
v_cd_submercado_compra = resultado(18,0)
v_cd_submercado_venda = resultado(20,0)
v_cd_submercado_entrega = resultado(22,0)
v_str_observacao = resultado(24,0)
v_dt_val_inicio = resultado(25,0)
v_str_produto = resultado(26,0)
v_dt_base_reajuste_tarifa = resultado(27,0)
v_cd_indicador = resultado(28,0)
[/vb]
Depois:
[vb]
Dim v
Set v = new VovoWrapper
v.SetRecordSetVariables(resultado)
[/vb]

Resumindo:

– Velho faz tudo em 3 linhas. Faz chover também, mas isso é outra história.
– Se você mudar o banco, não precisa mudar seu código aqui.
– O conceito de gerar código pode ser utilizado para muitas coisas, use a imaginação!
– Não conte pro Alex que está usando esta classe, aproveite o tempo livre que vai sobrar e de uns tapas na cabeça do Patrão.
– Percebam que o rubem está no CC do e-mail, para receber propositalmente 2x.
– Enjoy!