terça-feira, 23 de fevereiro de 2016

MVC e COBOL

Olá!

Model - View – Controller (MVC)

Para o português: Visualização – Controles – Modelos

Muitos utilizam o padrão MVC para o desenvolvimento de seus sistemas de software, sendo que este padrão de desenvolvimento é composto por três camadas bem distintas e com características bem definidas, de modo que sistemas que são elaborados na linguagem COBOL também podem ser construídos sob este padrão.

Sendo também que algumas organizações usam este modelo, entretanto pode ser encontrado com outro nome, por exemplo as três camadas podem ser chamadas de:
  • Visualização – Negocial – Persistência
  • Apresentação – Controlador – Manter (CRUD)
Assim quando você se deparar com um modelo desenvolvimento de software em camadas, tenha atenção aos detalhes, pois você já pode estar trabalhando com MVC. Em uma pesquisa rápida na internet é possível encontrar variados artigos a respeito de MVC.

O significado de cada camada:

Modelos: as rotinas (programas) que estão nesta camada são responsáveis pelo CRUD (Criar, Consultar, Atualizar e Deletar) os dados no DB, ou seja, são aquelas rotinas que irão conter códigos COBOL e SQL.

Controles: é a camada responsável por controlar as informações do sistema, então de um modo simplificado está recebe as requisições da camada de Visualização (usuário), verifica o “que”, “quando”, “onde”, “como” deve ser processado os dados. De modo que os controles podem requisitar aos Modelos para realizar algumas operações do CRUD, ou simplesmente validar a requisição conforme as regras de negócio.

Visualização: essa camada mostrar as informações retornadas pelos Controles ao usuário final, de modo que é também por meio dessa camada que o usuário realiza alguma requisição ao sistema. Assim, não ocorre um processamento de dados nesta camada.

O fluxo de dados entre estas camadas é demonstrado de acordo a imagem abaixo:



Em algumas situações o Java pode requisitar um Modelo diretamente. Mas porquê? Imaginamos que o Java precise montar uma combo com os nomes dos professores e que já exista um modelo que realize a consulta no DB para retornar os nomes e matriculas dos professores, então não há necessidade de criar um Controle somente para repassar os dados para a Apresentação. Lembrando que em algumas organizações não é permitido a camada de visualização acesse diretamente os Modelos.

Assim em um sistema Java e COBOL, a camada de apresentação é de responsabilidade do Java, e os Controles e Modelos são do COBOL.

Então, os programas COBOL na camada de Controle deverão analisar a requisição do usuário e aplicar as regras de negócio para processar os dados que serão retornados da camada de Modelos, e por fim o Java irá somente organizar as informações recebidas do COBOL para uma melhor visualização da resposta ao usuário.

Algumas vantagens por utilizar MVC, são:
  • Facilita o reaproveitamento de código. Pois por exemplo suponhamos que se tenha que gerar três relatórios que as informações venham da mesma tabela e aplicando várias regras de negócio, assim será somente necessário a criação de um programa na camada de Modelo para pesquisas as informações e três controladores para aplicar as regras de negócio; 
  • Muitos sistemas estão sendo desenvolvidos sob este padrão; 
  • Facilidade para futuras manutenções do código, já que todo o código está bem separado e com suas características definidas; 
  • Quando bem testado uma parte do sistema/código já pode ser reaproveitado para as demais ações. 

Mas também existem algumas desvantagens, que são:
  • Maior nível de atenção aos detalhes do requisito para o desenvolvimento do sistema, de modo a separar as características dos programas; 
  • Como o código está bem separado, será necessário testa-lo parte a parte; 
  • Ter que pensar que todo o sistema será desenvolvido em MVC, não é uma tarefa simples.

Consultar a relação de Termos e Abreviaturas acesse 
aqui.

Até o próximo post!

quarta-feira, 10 de fevereiro de 2016

Encontrar tamanho de uma String - Inspect Reverse

Olá!

Com o comando INSPECT é possível percorrer cada caractere de uma string, e assim analisar ou manipular a string. Também com este comando podemos descobrir o tamanho string dentro uma variável.

Porque descobrir o tamanho da string?

Imaginamos que no banco de dados se tenha um campo TEXTO VARCHAR (050), e no COBOL a variável que armazena o valor que irá para o DB é MENSAGEM PIC X (050). Se a movimentação for realizada de forma simples:

MOVE MENSAGEM TO VARIAVEL-DB-TEXTO.

Todos os 50 bytes serão utilizados todas as vezes, e isso não será útil (o melhor) para o DB. Pois, mesmo que a MENSAGEM tenha o valor igual a “Teste               ” que somente ocupa 5 bytes no DB, a movimentação acima irá considerar até os espaços em branco (posições vazias no final da mensagem) totalizando 50 bytes para o BD.

Como movimentar somente o conteúdo da string?

MOVE MENSAGEM(1:TAM-STRING) TO VARIAVEL-DB-TEXTO.

Com a movimentação acima é considerado somente o conteúdo da 1ª posição até o final da string, de modo que o final da string é o tamanho dela, ou seja, “Teste               ” tem o tamanho 5, então o final da string é na posição cinco, então TAM-STRING = 5.

Para encontrar o tamanho da string, será nos seguintes passos:

  •  Percorrer a string do FINAL para o começo, até que seja encontrado algum caractere;
  •  Com a quantidade de posições vazias encontrada, subtrair do tamanho total da variável;
  •  Movimentar o conteúdo fixado com os indicadores (1:TAM-STRING).
Sem mais delongas vamos ao código:


















No código apresentado, a variável TEXTO está com o tamanho PIC X (050), e o conteúdo desta igual a 
“Teste de encontrar tamanho STRING           ” com tamanho 33.
Sendo que o resultado é MOVE TEXTO (1:33) TO DB. Considerando somente o conteúdo da variável.


Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.

Até o próximo post!

segunda-feira, 1 de fevereiro de 2016

Unstring XML COBOL

Olá!

É apresentado neste post o UNSTRING do conteúdo de um XML, pode ser também considerado como exemplo para texto ou variável.

A ideia é que o COBOL seja capaz de extrair o conteúdo que esteja presente entre delimitadores predefinidos, ou seja, neste exemplo independente do conteúdo que o XML tenha entre as TAGs a rotina COBOL deverá extrair.

XML:
Para o exemplo consideremos o XML abaixo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mensagem nome="testeUnstring">
  <codMsg>1234567890</codMsg>
  <txMsg>Mensagem de teste</txMsg>
  <dtMsg>22/01/2015</dtMsg>
</mensagem>

COBOL em passos:
  1. Recebe o conteúdo do XML, como: TX-CONTEUDO = “<codMsg>1234567890</codMsg><txMsg>Mensagem de teste</txMsg><dtMsg>22/0 1/2015</dtMsg>” 
  2. Para cada TAG com o comando UNSTRING descobre a posição inicial do conteúdo, exemplo: para a TAG <codMsg> a posição inicial é 9 
  3. Com a posição inicial descoberta, é feito um loop para realizar a transferência de um carácter por vez para uma variável temporária até que o delimitador final “<” seja encontrado. 
  4. Por final é transferido o texto para a variável final.
Segue o código respectivo aos passos acima.























































O resultado do código acima é que as variáveis tenham o seguinte resultado:

Código da mensagem -> GDA-CD-MSG = 1234567890
Texto da mensagem   -> GDA-TX-MSG = Mensagem de teste
Data da mensagem    -> GDA-DT-MSG = 22/01/2015

Ou seja, a mecânica/lógica é que se tenha delimitadores (tag) de início e fim, para que por meio do delimitador de início seja encontrado a posição inicial do conteúdo dentro do XML. Para isso, usamos o comando UNSTRING com WITH POINTER VL-PSC-RCPD, onde a variável VL-PSC-RCPD recebe o número da posição do último carácter da tag. Então, se a primeira tag for <codMsg>, a variável VL-PSC-RCPD tem o valor 9, sendo o seguinte passo realizar um loop a partir da posição 9 para extrair um carácter por vez para uma variável temporária até encontrar a tag final </codMsg>.

Caso o XML, seja:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mensagem nome="testeUnstring">
  <codMsg>123312</codMsg>
  <txMsg>Outra mensagem de teste</txMsg>
  <dtMsg>01/01/2014</dtMsg>
</mensagem>

O resultado seria:
Código da mensagem -> GDA-CD-MSG = 123312
Texto da mensagem   -> GDA-TX-MSG = Outra mensagem de teste
Data da mensagem    -> GDA-DT-MSG = 01/01/2014

Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.

Até o próximo post!