A discussão é a seguinte: Como avaliar/garantir performance, escalabilidade, reaproveitamento, manutenção, usabilidade em um ambiente tão hostil e precário que é a programação estruturada?
Com a experiência que vim adquirindo, comecei a me questionar se eu poderia usar algumas boas práticas que a metodologia de OO prega, já que ela nasceu de códigos estruturados e de uma necessidade de evolução. Acompanho de perto várias opiniões, sobre o uso ou não uso de funções separadas, includes, algoritmos com maior ou menor complexidade e etc.
Vamos considerar a pirâmide abaixo com 3 variáveis para facilitar o entendimento:
O desafio é: Como manter o equilíbrio da pirâmide? Analisando cada extremidade pode-se concluir:
Manutenção:
- Para que eu torne mais fácil de ser alterado, eu posso evitar o uso de funções, includes e algoritmos de alta complexidade. Crio tudo em um único método [main()], não individualizo cada regra de negócio ou cada passo da rotina. LOGO:
- Não é possível reaproveitar nenhuma regra de negócio;
- Perco performance, pois ao invés de utilizar um algoritmo ou uma query cabeluda, faço vários "nós" de fácil entendimento para qualquer um e resolvo o problema;
- Para que eu torne meu código mais performático, eu me esforço ao máximo, passando horas para desenvolver aquela algoritmo que utiliza todo o conceito de ponteiros, estrutura de dados, busca binárias, algoritmos de ordenação ou então para fazer aquela belíssima Query de 300 linhas. LOGO:
- Meu código comprovadamente roda muito mais rápido agora, porém o único "mágico" capaz de entender o mesmo é danado do filho da minha mãe (detalhe: ela só tem um);
- Meu algoritmo/procedure/query é tão específica que só atende à aquele passo do fluxo, logo não aproveito nem com um CTRL+C e CTRL+V;
Reaproveitamento
- Para que eu possa aproveitar as regras de negócio que talvez possam existir em mais de um domínio, eu crio vários arquivos de código fonte (#includes), destrincho algumas funcionalidades em funções que depois poderei ainda no pior caso aproveitar no CTRL+C e CTRL+V. LOGO:
- Para cada "main()" precisarei de vários arquivos para garantir sua execução, ta, tudo bem... EU SEI quais são. Será que o filho da mãe do outro vai saber no dia que eu não mexer mais com isso?
- Lembrem-se do DEBUG com #includes? Dispensa comentários =D
- Minha função que calcula A+B também por acaso divide A/B, mas neste caso só preciso do primeiro cálculo... hum... performance....
Enfim, entre outros casos, logo temos a figura da pirâmide um pouco mais ilustrada:
O próximo passo é tentar provar o contrário da figura, ou seja, estressar um dos lados sem afetar o outro. Missão difícil na minha opinião, a melhor maneira, é saber dosar e tentar encontrar o equilíbrio.
Bom, acho que isso é um bom início de discussão. Comentários e opiniões são bem vindos :)
Abraços!