[Cascavel-pm] [OFF-TOPIC] Gerenciamento de versoes

Daniel Ruoso daniel em ruoso.com
Segunda Dezembro 19 10:10:38 PST 2005


Em Seg, 2005-12-19 às 14:50 -0200, Donato Azevedo escreveu:
> explicando o contexto:
> a empresa aonde trabalho mantem uma aplicação web sob tres versoes
> diferentes (3 produtos) que dividem grande parte parte do código mas
> sao mantidos em arvores diferentes no cvs. Deste modo:
> 1. Nao existe uma versao basica a partir da qual se possa criar uma
> nova do zero, ou vender como uma solução mínima para alguem
> 2. Um bug encontrado em uma versao deve ser corrigido e testado nas
> outras 2.... Isto porque só temos 2! se fossem 30......

Você chegou ao problema que todos que desenvolvem sistemas de informação
como produtos (software houses) inevitavelmente um dia vão chegar :)

A questão é, você precisa atender necessidades diferentes mas ainda
assim tem uma porção de códigos que fazem a mesma coisa, por exemplo,
para o cliente A você precisa que tal regra seja assim e para o cliente
B tal regra tem que ser assada.

Depois de muitos anos montando arquiteturas de sistemas de informação,
eu cheguei a dois termos:
1) Plugin
2) Web Service

Na verdade, o ideal seria os dois, mas se você sabe que vai estar
trabalhando na mesma linguagem sempre, e se os mecanismos de comunicação
do seu aplicativo já estão consolidados (o que pode ser simplesmente um
módulo chamando outro), o primeiro já vai salvar a sua vida.

Como isso funciona?

Em primeiro lugar, você precisa estabelecer uma interface (no caso, a
regra em que falei), e então você precisa estabelecer as implementações
dessa interfaces (assim e assado são implementações daquela interface).

Bem, até aí não tem nada demais, é apenas aquilo que a orientação a
objetos já previa mesmo, mas como o que você quer é que exatamente o
mesmo código seja usado nos dois clientes (A e B), você precisa que você
possa substituir a implementação assim pela implementação assada
on-the-fly. Existe um Design Pattern que resolve esse problema, e o nome
dele é "Class Factory".

Como o Class Factory Funciona?

Bem, em primeiro lugar, isso não se aplica apenas a orientação a
objetos, mas pode ser analogamente usado como um wrapper em programação
funcional. Esse Class Factory irá buscar em algum lugar (uma tabela das
implementações daquela interface, por exemplo) qual implementação deve
ser utilizada e só então obter a classe ou as funções a serem
utilizadas.

Em Perl, sabemos que isso é moleza, pois é só uma questão de acessar o
pacote Regra::Assim ou Regra::Assado (tanto para OO quanto para
funcional). Em Java o negócio é mais chato, você tem que usar a
introspecção da linguagem (que é devidamente complicada (assim como tudo
em Java)), para obter a classe correta. Não faço a menor idéia de como
VB faz introspecção, mas em último caso um módulo wrapper com if's
também vai resolver o problema (de forma tremendamente horrorosa, mas
resolve).

Dessa forma, você vai conseguir utilizar exatamente a mesma distribuição
do sistema nos dois clientes e reduzir exponencialmente a complexidade
do gerenciamento do desenvolvimento e correções de bugs.

daniel

P.S.: Vou colocar isso como um artigo no fortaleza.pm.org...



Mais detalhes sobre a lista de discussão Cascavel-pm