terça-feira, 8 de junho de 2010

Como reutilizar componentes

Muito se fala de reutilização de componentes. Todos sabem que é muito importante reutilizar para reduzir o esforço, porém, o que muitos não entendem é que a reutilização não é tão simples.

Principalmente pessoas em cargos de chefia, que não estão diretamente ligados ao desenvolvimento, não entendem o que realmente é a reutilização. O que, à princípio parece ser algo simples, na verdade, deve ser feito com cuidado. Não adianta chegar um dia na empresa e dizer “vamos reutilizar componentes” sem ter uma política adequada.

Vejo três formas comuns de se reutilizar componentes:
  • Utilizar componentes de terceiros;
  • Desenvolver componentes próprios reutilizáveis;
  • Copiar e colar (sim, isso mesmo).

Utilizar componentes de terceiros

Essa forma de reutilização é, à princípio, a que demanda menos esforço por parte da equipe de desenvolvimento, afinal, não é necessário desenvolver nada.

Porém, o custo do desenvolvimento é apenas uma parte do custo total de utilização de um componente. Ao adotar um componente de terceiro deve-se ter cuidado com algumas outras questões:
  • Qual a curva de aprendizado dele?
  • Quão extensível ele é? Pode ser customizado para atender as diversas necessidades?
  • No caso de um problema nesse componente, como será feita a correção?
  • Este componente está em desenvolvimento? Está maduro? Há previsão de continuidade no desenvolvimento dele?
Como pode-se ver, adotar um componente de terceiros geralmente não é uma opção tão simples quanto se imagina à princípio. Além da aprendizagem necessária, deve-se atentar ao desenvolvimento dele, se a equipe de desenvolvimento poderá contar com melhorias futuras e/ou suporte em caso de problemas.

Desenvolver componentes próprios reutilizáveis

Quando não há um componente de terceiros disponível, ou há alguma outra limitação como o preço ou inadequação do componente, a solução pode ser desenvolver seus próprios componentes reutilizáveis.

Um detalhe muito importante é: não desenvolver um componente sem um caso de uso em mente. Já vi diversas vezes componentes ultra genéricos, que resolvem todos os problemas do mundo, serem criados e quando precisam ser utilizados, simplesmente não servem para nada.

Normalmente a criação de um componente reutilizável deve ocorrer de forma natural. Se um determinado componente foi útil para uma situação, e poderá ser aproveitado para outras, então sim, podemos reutilizá-lo. Antes de pensar em reutilizar é necessário utilizar.

A questão mais complexa dessa reutilização é o versionamento do componente. Deve-se ter muita atenção no controle das versões e alterações que fazem outros projetos deixarem de funcionar. Esse componente, afinal, estará sendo utilizado em mais de um projeto e consequentemente, cada alteração deve ser muito bem pensada.

Copiar e colar

Não, não estou de brincadeira. Copiar e colar é uma ótima forma de reutilização.

Há situações onde determinado código é usado em várias situações, mas em todas com pequenas modificações, não sendo possível ou valendo a pena tentar criar um componente.

Por exemplo, nos últimos projetos que participei foi necessário fazer uso de um Application Controller. Apesar da base ser igual em todos os projetos, cada um tem suas peculiaridades. Nesse caso, foi muito mais simples copiar a classe e adaptá-la.

Deve-se tomar muito cuidado para o copiar e colar não virar regra. Essa forma de reutilização deve ser utilizada somente como exceção, e somente entre mais de um projeto, quando o custo de versionamento e gerenciamento do componente são maiores que o benefício da reutilização. Dentro de um mesmo projeto, o custo de versionamento é pequeno, por isso, normalmente o copiar e colar nunca será utilizado.

Conclusão

A reutilização de componentes não deve ser feita a esmo, sem nenhum planejamento. Não basta o diretor dizer “vamos reutilizar” e tudo sai funcionando. É necessário uma política de reutilização e acima de tudo, um ótimo versionamento.

Sem um planejamento adequado, aquilo que deveria ser uma forma de reduzir custos acaba se tornando uma tormenta.