Integração entre aplicações: Existe algum padrão para múltiplos mapeamentos?

4 respostas
D

Estou com a seguinte situação, existe uma aplicação que possui sua estrutura de tabelas seguindo um padrão. Existe outra aplicação web externa com seu padrão de nomes de campos e existe minha aplicação seguindo o padrão de get/set para as propriedades de um VO.

Assim:

  • Não posso modificar os nomes da coluna do banco, pois se trata de uma aplicação "legada" (está sendo migrada de Client/Server para web). Nome da coluna: CIDADE.

  • Para esta base de dados, as operações CRUD são realizadas através de procedures do banco que possuem outro padrão de nomenclatura. Assim o nome da coluna CIDADE, para a procedure se chama sCidade, por exemplo.

  • Não posso modificar os nomes dos campos do formulário, pois esses formulários fazem parte de um sistema externo. Então existe o campo chamado edtCidade, por exemplo.

  • Por sua vez, minha aplicacão utiliza uma nomenclatura seguindo os padrões de getters/setters o que não corresponde nem à estrutura do banco, nem à estrutura dos formulários web. Por exemplo, getNomeCidade e setNomeCidade.

Ou seja, estou no meio de duas estruturas diferentes de banco/formularios web que não possuem equivalância padrão entre os nomes dos atributos destes mundos.

Isso exige que eu fique fazendo muitos mapeamentos, do formulário web --&gt VOs, do Banco(em um select) --&gt VOs, de VO (aplicacao) --&gt VO(procedure) e isso, como é de se esperar é muito improdutivo e sujeito a erros.

Com esta situação apresentada, existe algum padrão de mapeamento que eu possa utilizar ou alguma sugestão sobre como minimizar este trabalho?

Acredito que quem já trabalhou fazendo integração entre aplicações já deve ter passado por situação semelhante.

[]'s

Daniel Augusto

4 Respostas

Luca

Olá

Não entendi porque é sujeito a erros.

Você apenas precisa de um intermediário que efetue a tradução dos nomes. Se você tem acesso às 2 bases isto é super fácil porque pode usar metadados do JDBC para pegar os nomes dos campos. E se você não tem acesso, solicite um dicionário de dados ao dono da outra aplicação e implemente a tradução.

Será que entendi realmente o que você quer?

[]s
Luca

D

Existe algum exemplo ou padrão de implementação deste intermediário que efetue a tradução de nomes?

Explicando melhor meu problema:

Atualmente o processo é realizado manualmente, por isso é sujeito a erros, além de ser muito trabalhoso.

Utilizo o iBatis e não o JDBC diretamente, assim é preciso fazer o mapeamento através de resultMap das colunas do banco de dados.

Algo como (simplificado):

<select id="listCidade" resultMap="mapListCidade">
       SELECT CODCIDADE,
              CIDADE,
              UF
       FROM CIDADE
</select>

<resultMap id="mapListCidade">
        <property name="codCidade"        column="CODCIDADE"/>
        <property name="cidade"           column="CIDADE"/>
        <property name="uf"               column="UF"/>
</resultMap>

Com isso tenho um Map com as chaves codCidade, cidade, uf, com os valores retornados do banco.

Assim preciso fazer o primeiro mapeamento deste map para meu VO com as propriedades get/setNomeCidade, get/setCodigo, get/setUf.

O que vem do formulário possui os campos edtCidade, edtCodigo, cmbEstado.

Então para ser utilizado pela procedure, preciso fazer o mapeamento de edtCidade, edtCodigo, cmbEstado para um VO get/setsCidade, get/setnCodCidade, get/setsUf ou para um map sCidade, nCodCidade e sUf, além de fazer para a estrutura de meu VO (get/setNomeCidade, get/setCodigo, get/setUf).

Luca

Olá

Ainda não entendi a necessidade de nada manual e como você não disse nada, presumo que tem acesso as 2 bases. Quando se tem acesso as 2 bases e é preciso fazer migração de base de dados, se usa metadados do JDBC e quando muito uma tabela de equivalência que se escreve uma vez na vida.

Se com o iBatis é mais complicado então use JDBC.

[]s
Luca

pcalcado

http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs

Criado 14 de outubro de 2006
Ultima resposta 4 de jan. de 2007
Respostas 4
Participantes 3