sexta-feira, 14 de maio de 2010

Sombreamento de Classe

Conforme meu post anterior fiquei com poucas alternativas para contornar o meu problema:
  • Mudar o HTTPService.resultFormat para e4x.
  • Setar HTTPService.xmlDecode.
  • Alterar a classe SimpleXMLDecoder no SDK e compilar.
  • Esperar o Flex Team alterar SimpleXMLDecoder.simpleType no SDK para poder sobreescrever este método e tratar os dados da forma mais adequada para minha aplicação.
As duas primeiras opções seriam trabalhosas porque teria que fazer o mesmo que a classe SimpleXMLDecoder faz, isto é, transformar o resultado em object e isto seria necessário para evitar um impacto maior na minha aplicação já que esta espera este tipo de retorno. A terceira é delicada porque todo novo SDK teria que aplicar minhas alterações, compilar e distribuir para a equipe. E a última opção é a mais demorada.

Aí me lembrei de um conceito não muito utilizado, o Sombreamento ou Shadowing que também se aplica para Java. O que faria neste caso, criaria na minha aplicação o pacote mx.rpc.xml e nele copiaria a classe SimpleXMLDecoder do SDK e na primeira linha do método simpleType(val:Object) colocaria return val; com isso não seria feito o cast deixando sempre como String o que para minha aplicação atende plenamente. O detalhe aqui é que todo HTTPService que eu usar irá utilizar esta classe do meu projeto e não a sua correspondente no SDK e toda vez que sair um novo SDK terei que aplicar as alterações o que com o uso do SVN fica fácil identificar o que foi alterado e também a equipe ao atualizar o projeto já veria esta classe e suas atualizações.

2 comentários:

  1. Opa Fábio.
    Tem um outro termo mais utilizado para isso: "Monkey Patch" (http://en.wikipedia.org/wiki/Monkey_patch)

    o Andre Gil (http://andregil.net) comenta sobre isso, recentemente ele teve q fazer para corrigir um bug no SDK 3.5

    []s

    ResponderExcluir
  2. Veja tb http://fabiophx.blogspot.com/2010/08/bug-em-xmldocumentignorewhite.html

    ResponderExcluir