Como programadores, sinto que nosso objetivo é fornecer boas abstrações no modelo de domínio e na lógica de negócios. Mas onde essa abstração deve parar? Como fazer a troca entre abstração e todos os seus benefícios (flexibilidade, facilidade de alteração, etc.) e facilidade de entender o código e todos os seus benefícios.
Acredito que escrevo códigos excessivamente abstratos e não sei como é bom; Costumo escrever como se fosse algum tipo de micro-framework, que consiste em duas partes:
- Micródulos acoplados à microestrutura: esses módulos são fáceis de entender, desenvolver e manter como unidades únicas. Esse código basicamente representa o código que realmente executa as coisas funcionais, descritas nos requisitos.
- Código de conexão; Agora, aqui, acredito, está o problema. Esse código tende a ser complicado porque às vezes é muito abstrato e difícil de ser entendido no início; isso ocorre devido ao fato de ser apenas pura abstração, sendo a base da realidade e da lógica de negócios executada no código apresentado 1; por esse motivo, não se espera que este código seja alterado uma vez testado.
Essa é uma boa abordagem de programação? Isso, tendo o código de alteração muito fragmentado em muitos módulos e muito fácil de entender e o código sem alteração muito complexo a partir da abstração POV? Todo o código deve ser uniformemente complexo (ou seja, código 1 mais complexo e interligado e código 2 mais simples), para que qualquer pessoa que o veja possa entendê-lo em um período de tempo razoável, mas a mudança seja cara ou a solução apresentada acima seja boa, onde "alterar código" é muito fácil de entender, depurar, alterar e "vincular código" é meio difícil.
Nota: não se trata de legibilidade de código! Os códigos 1 e 2 são legíveis, mas o código 2 vem com abstrações mais complexas, enquanto o código 1 vem com abstrações simples.