Clean Architecture

Finalmente... Finalmente consegui aplicar Clean Architecture no Java com Spring.

https://i.pinimg.com/originals/85/7a/09/857a090ef3470b63be901b5ae2b55b54.png

Mas brincadeiras a parte, o que vocês acham sobre o tema?

Estou perguntando isso porque estou querendo evoluir na área e uma pessoa falou que era muito importante eu saber isso, mas vi aqui vocês comentando que é superestimado, que não é totalmente necessário. Então eu gostaria de pedir uma orientação, como vocês estruturam seus projetos para mantê-los firmes?

Clean Architecture é super estimada. Já trabalhei em um projeto grande que tentaram seguir e um projeto pequeno que também tentaram seguir. Em um (no grande) a experiência foi muito bem feita e facil de dar manutençào, já no outro era um inferno. Pra valer a pena tem que levar em consideração a maturidade da equipe e os code reviews. Eu acho que vale a pena estudar para saber a hora certa de usar, o resto é só hype de vendedor de curso.

Como várias outras coisas. Toda ferramenta pode ser útil, o problema é que boa parte delas, especialmente as criadas desde os anos 90 e até um pouco antes, não curam o câncer como muitos acham. Eu gosto da ideia, tem que aprender, e em vários casos pode usar alguma coisa dela aqui e ali. Mas lembre-se que a maioria dos projetos não são complexos e não duram tanto (exige muita manutenção) para justificar o custo de fazer isso. Além disso, o ser humano é péssimo de previsão. É extremamente comum ele fazer coisas que nunca serão úteis, forma só custo, e não fazem algumas delas que serão necessárias e gerarão custo para modificar depois. Você tem o pior dos mundos. E quase ninguém consegue provar que foi uma decisão boa, que compensou. As pessoas adotam como modinha, usam porque os outros estão usando. Ou pior, estão falando e nem usam. Isso vale para DDD, TDD, microsserviços, SOLID, Agile, *patterns* famosos, até mesmo OOP em certa medida, só para citar alguns. Algumas dessas tecnologias são ótimas para 1% dos projetos, ou 0,1%. OOP é meio exceção que é bem mais útil, mas as pessoas usam muito onde não faz sentido e usam errado, porque só querem dizer que estão usando. Não saber porque está usando, e provar que está dando resultado já é ruim. Use sim, essas coisas, se tiver justificativa. Não ignore o YAGNI. Não ignore que muita gente tentou usar e ficou show de horrores, e a maioria tem vergonha de falar publicamente sobre. Em geral quem fala era contra ter feito no ambiente em que ela trabalhava, os favoráveis ficam em silêncio depois da tragédia acontecer, e vão justificar como puderem. Eu mesmo tenho várias anedotas dessas. Tem conversas de corredor que as pessoas até confessam a merda que fizeram, mas jamais vão admitir publicamente. Não use sem muito cuidado, e não descarte só porque a utilidade é pequena. Ganhe experiência para decidir. E para isso precisa parar de seguir modinhas, precisa decidir com mais critério. Boa observação sobre o fato de que muitas vezes falha porque a equipe não está preparada, ela só quer por no currículo que fez. Curiosamente hoje o *hype* não é só do vendedor de curso. É parecido com a política que cria o *hype*, mas depois ela deixa a massa (alguns chamam de gado, não importa quem está seguindo) fazer a propaganda, e nem precisa sujar tanto as mãos. É muito doido. Faz sentido para você? Espero ter ajudado. --- Farei algo que muitos pedem para aprender a programar corretamente, **gratuitamente**. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações ([links aqui](https://github.com/maniero/SOpt)).

Na minha opinião tem uma coisa que vale a pena: separar as lógicas do domínio de implementações de infraestrutura e bibliotecas externas.

Últimamente tenho preferido arquitetura hexagonal para isso pois ela é mais simples e mais objetiva.

https://drive.google.com/file/d/1i1Dqo_c9po73EM4eiuvt9cIZYN39ZvJR/view?usp=sharing

tenho usado muito algo nessa linha.