· 1 min de leitura
Paradoxo da Simplicidade
“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.”
― Edsger Wybe Dijkstra
Ultimamente tenho refletido muito sobre o que é simplicidade, por exemplo, o que é um software simples?
Você pode considerar que esse código aqui é simples de construir:
app.get('/user/:id', async (c) => {
const id = c.req.param('id')
const response = c.userDb.findOne(id);
return response;
})
Mas não necessariamente é simples de evoluir, se eu precisar buscar o usuario em outro endpoint, vou chamar direto o banco de dados? Sempre? Então quem conhece o usuário?
Então vamos criar uma Service para isso
Aí você pode fazer algo assim:
import { getUser, deleteUser } from `user.service.js`
app.get('/user/:id', async (c) => {
const id = c.req.param('id')
const response = getUser(id)
return response;
})
app.delete('/user/:id', async (c) => {
const id = c.req.param('id')
const userExist = getUser(id)
if(userExist) {
return deleteUser(id)
}
return response;
})
Agora temos mais uma camada, amarramos nosso projeto a um padrão, agora todo e qualquer novo recurso, precisa explicitamente de uma service é a regra! Abrimos mão da simplicidade de construir um recurso novo, para a capacidade de evoluir o produto mais rápido.
E com o tempo, começam a surgir cada vez mais Services, algumas são usadas em um lugar só, pra fazer apenas uma busca no banco, agora parece que ta dificil evoluir tambem, afinal, cada consulta é um metodo na service.
E eu nem vou entrar em Repository, Interfaces, Injeção de dependencia pra não ficar denso.
Por isso, simplicidade deveria ser um exercício constante: abstrair aquilo que realmente precisa ser abstraído, sem esquecer aquilo que ainda não precisa. Entender que software não é escrito em pedra e que uma decisão tomada para resolver um problema específico não deveria, sem necessidade, comprometer todo o projeto.
Mudar faz parte. E talvez um software simples seja justamente aquele que nos permite mudar de ideia sem precisar lutar contra as decisões que tomamos ontem.