quarta-feira, dezembro 29, 2004

Pattern para transformação simples?

Faz um tempo que não escrevo nada. Esses dias estava mexendo com transformações entre dois objetos. O problema é que nem sempre as transformações são entre atributos simples, algumas vezes um atributo vira dois, outras vezes dois atributos viram um, outras vezes ainda uma transformação é baseada no resultado de uma outra... Acabei usando o princípio do KISS (Keep It Simple Stupid) e a solução ficou bastante boa. Vou compartilhar aqui pra não esquecer. Basicamente, eu crio vários transformadores, cada um recebe o objeto de origem e o objeto de destino. Dessa forma, o transformador pode acessar o que bem entender dos dois lados. Para transformar o objeto inteiro, eu crio uma coleção de transformadores e rodo eles todos em cima do mesmo objeto origem e objeto destino. O objeto destino funciona como um Collecting Parameter (isso é um pattern, viu!) e ao final de rodar todos os transformadores, ele está totalmente preenchido. Simples né? As vantagens: 1 - Se tiver transformações que dependam do resultado de outra, vc pode simplesmente colocar uma antes da outra. O transformador dependente vai consultar o resultado no objeto destino para decidir o que fazer, uma vez que a transformação anterior já preencheu ela. 2 - Todo transformador pode ser fatorado para trabalhar na base do um-pra-um. Exemplificando: imagine que tenho um transformador que pega o campo "número de registro" na origem e coloca os cinco primeiros dígitos em "número do departamento" e os cinco últimos em "número do funcionário". Posso quebrar ele em dois transformadores, um que usa "número de registro"->5 primeiros dígitos->"número do departamento" e outro que usa "número de registro"->5 últimos dígitos->"número do funcionário", ao invés de usar um transformador só que faz tudo. Da mesma forma, posso compor vários transformadores em um único, e se eu quiser fazer gracinha, posso implementar eles como se fossem um Composite, aí um transformador pode conter vários transformadores. Mas não vi muita vantagem em fazer isso. No geral, a abordagem ficou muito simples e muito extensível. Será que isso já está escrito como pattern em algum lugar?

Nenhum comentário:

Postar um comentário