Estou começando a perceber que o desenvolvimento de software é (entre outros) um processo de se fazer perguntas constantemente. Perguntas sobre qualidade de código, separação de preocupações, minimização de dependências, ...
Mas a questão principal é: até onde você pode ir sem acabar em um hospital psiquiátrico?
Estou me candidatando a um novo emprego. Ontem eu estava com um possível futuro empregador que queria testar meus recursos de programação. Um dos exercícios foi: explique o que esse código faz. Passei por algum código do aplicativo (winforms no vb.net) que eles desenvolvem (é um aplicativo administrativo para um hospital). Isso me deu a oportunidade de realmente ver como eles abordam as coisas e foi bastante decepcionante.
Alguns exemplos:
- Vi em algum lugar: Ligue [insira o nome da sub-rotina aqui] -> fiquei impressionado: isso não é algo do VB6?
- Eles têm uma camada de dados separada, usando ado.net, mas um método que eu tive que examinar retorna um conjunto de dados para a camada de chamada. Portanto, separador de dados separado ou não, o aplicativo está vinculado ao ado.net (o que também pode nunca ser um problema se nunca mudar para outra abordagem de acesso a dados).
- Esse conjunto de dados é lido como está, por isso ainda é uma abordagem centrada em dados (é claro, pode-se argumentar quanta lógica / comportamento você pode colocar em classes como "Paciente" ou "LabAnalysisRequest".
- Eu também acredito ter visto a construção de uma consulta sql por concatenação de strings.
- Eles usam procedimentos armazenados (o que, para mim, significa: dispersão da lógica)
- nenhuma menção de visualizações / controladores: tudo é orientado
- A coisa mais feia que vi foi:
Se TestEnvironment.IsTesting, someVar = [algum valor codificado] outro someVar = [algum valor recuperado dinamicamente] fim se [restante da função aqui]
É tudo tão diferente do que aprendi na escola: camada de domínio (independente de persistência), camada de persistência, camada de apresentação, teste de unidade, ...
Por isso, refiz minha pergunta: quão fundamental ou dogmático deve ser? Até que ponto um programador deve seguir seus princípios ou apenas escrever um código que faça o trabalho?