Executando verificação de segurança...
5

Dúvida: Overengineering em .NET

Gostaria de entender se é uma percepção minha ou se realmente é algo que todos sofrem...

Estou iniciando e decidi iniciar com .NET, o problema é que todo conteúdo de projeto que encontro está absurdamente lotado de arquiteturas e complexidades que não parecem ser muito condizentes com os projetos pequenos.

Gostaria também de entender a partir de qual momento é bom começar a se apegar nessas questões de arquiteturas.

Obrigado

Carregando publicação patrocinada...
9

Sim, isso acontece muito e não é só .NET.

Não costumo trabalhar com sites, mas se preciso entregar um simples, eu procuro algo para começar já perto do que o cliente precisa e nunca acho um simples em .NET. Acho em PHP... antigo, cheio de buracos de segurança que preciso consertar, mas é quase o que preciso. Note que eu não faria isso em algo mais complexo.

Em PHP também tem uma onda de complexidade cada vez maior, a diferença é que cada vez mais o que você encontra é complexo e os exemplos antigos não eram. Houve uma inversão, o que mostra muito sobre o programador PHP.

PHP é uma das 3 linguagens que mais trabalhei na vida, tenho amigos grandes programadores PHP que concordam que estão acabando com o PHP com isso. Ao contrário da crença popular PHP hoje é pior que era antes, apesar de ter algumas melhorias. Se for para fazer em PHP complexo como fazem, Java ou C# é muito melhor. Não à toa o Facebook criou Hack porque eles precisavam de algo mais complexo e tinham que aproveitar a base me PHP, então transformaram PHP em C# (quem cuida de Hack hoje é quem fez boa parte do trabalho de C#). Pseudo programadores de PHP vão ler e odiar isso, vão xingar a minha mãe, vão espernear no chão, porque eles entraram na área assim. Os bons programadores sabem do que estou falando.

Em C# acontece o contrário, era tudo complexo, mas hoje tem como fazer mais simples, só que ainda quase ninguém faz, mas já está aparecendo alguns exemplos pelo menos em parte mais simples. Por exemplo, em .NET, assim como em outras tecnologias, estão abandonando o MVC (ele poderá ser útil em alguns poucos cenários bem específicos) para usar coisas mais simples como Razor Pages ou Minimal APIs, mas faltam exemplos, gente falando delas.

Em PHP nasceu simples, agora as pessoas fazem tudo MVC porque parece que são melhores programadores assim, quando eles estão indo na contramão do mercado, mas eles aprendem tudo na base da gambiarra, suas referências são influencers sem compromisso algum com o sucesso dos seus seguidores.

Eu adoro C# e hoje acho o .NET bem aceitável (para melhorar de vez teria que quebrar compatibilidade, mas quase todos os problemas foram resolvidos, alguns estão à caminho que eu sei), mas admito que para fazer o simples está faltando algum trabalho. Tem melhorado muito, mas quase sempre você terá que fazer bibliotecas simplificadoras. É o preço que se paga pelo poder. Mas o que mais falta mesmo é ter influencers batendo na tecla da simplicidade, fornecendo projetos base mais simples. É preciso explorar as novidades da linguagem, quase ninguém faz, mas tem recursos que podem automatizar algumas coisas complexas, abstrair outras.

Eu sempre falo que a maioria dos projetos não precisa de certas coisas que as pessoas tanto falam. A pessoa quer fazer a tal "Arquitetura Limpa" que de limpa não tem nada, e ela não sabe nem porque está fazendo aquilo, está aceitando a especulação de alguém que nem conhece seu projeto. O mesmo vale para o código limpo, tudo isso tem serventia, inclui algum aprendizado interessante, mas a maioria aplica onde não precisa e complica o que deveria ser simples. SOLID então, abuso de design patterns, só para pôr no currículo, fazer microsserviços que deveria ser algo útil em menos de 0,1% dos projetos. Fazer algo simples não é a mesma coisa que fazer algo ruim, pelo contrário. Várias dicas famosas de escrever código fácil de manutenção pioram a manutenção, até porque foram inventadas por quem nunca deu manutenção, quem fez centenas de projetos em alguns anos. Eu fiz poucos em décadas, eu sei o que é dar manutenção, o que as pessoas precisam ou não no futuro (mesmo assim, bem mais ou menos, porque o futuro é mais imprevisível do que as pessoas pensam). Você não deve pagar por algo que não é útil.

As pessoas precisam parar de programar baseando-se em crenças. E precisam parar de seguir quem as vende para você. A computação quase não tem assunto novo, então ficam inventando coisas, dão exposição para cosias até úteis, mas para o 1%, não para o seu projeto e você acha que não pode ficar de fora.

Aí vem a frase que sempre repito, você aprende errado, treina o erro, faz tanto ele que não consegue parar de defendê-lo e depois ensina errado para outra pessoa.

É bom ver que algumas pessoas notam que tem algo cheirando mal, mesmo que ela ainda não tenha todo o estudo para saber o porquê.

Tem gente que estuda arquitetura antes de saber um if corretamente. É sério. Muita gente. Arquitetura é a simples, se precisar de uma complexa vai aprender em um time experiente como fazer isso, você não vai arrumar emprego porque sabe fazer o que tá cheio de gente mais experiente que você. Aí torço para entrar em um time bom e que não faz arquiteturas complexas só para pôr no currículo, porque cai no que eu já falei acima.

https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

1

Excelente comentário! Concordo com tudo que o colega mencionou. Após anos programando (22) e trabalhando com quase tudo, aprendi que eu precisava é ter amor pelo dinheiro e não pela tecnologia. Ficar implementando coisas no código só porque está em "alta" não representa nada para a maioria dos cliente. Só traz dificuldade e estresse para quem for fazer a manutenção. Neste modelo, coisas como "salas de guerra" tornam-se bastante frequentes e quem já viveu uma, sabem muito bem o inferno que é.

Finalizo aqui com uma frase que ouvi de um cliente após fazer uma apresentação técnica onde procurei "falar bonito" sobre a tecnologia, etc... No final da apresentação, ele me disse:

Ok, mas quando é que isso vai se pagar e passar a dar lucro?

Após este dia, mudei minha mentalidade. Entendi que o cliente mesmo não está nem aí para o que você está utilizando e como faz. Ele só se interessa se vai funcionar e se vai dar lucro. Mais nada além disso.

Me paguem aí R$ 1M para um CRUD web em COBOL, se eu não faço sorrindo.... :)

1

Maniero, gostaria de expandir um ponto que o seu comentário trouxe.

Acredito que muito da causa de ter tanto código em .NET implementando arquiteturas complicadas não é apenas por "culpa" dos influencers, mas sobretudo, pelo público-alvo que a Microsoft veio tentando captar todo esse tempo. Claro que quem tá inserido atualmente no mercado de .NET – assim como eu – sabe que a Microsoft vem sim tentando simplificar todo o framework para abringir projetos de escopos menores, mas ainda não é a imagem que as pessoas lá fora tem.

Penso que os criadores de conteúdo estão simplesmente atendendo a demanda da maior parte do público que utilizam o .NET, que são os programadores que atuam empresas de ERP, Banking e dentre outras aplicações que precisam naturalmente ter uma arquitetura que contêm mais camadas.

Além do que, mesmo com os esforços em simplificar o framework, o único passo significativo que eu vi foi o Minimal APIs. A linguagem vem sim se modernizando, fazendo-a ser, para mim, uma das melhores linguagens do mercado. Mas ela ainda é bem mais complexa que um JavaScript, por exemplo. As modernizações adotadas é muito mais para simplificar a criação de design patterns do que a sintaxe em si (e nem acho que precise, honestamente).

Enfim, apesar deu achar o framework o melhor para desenvolvimento de ponta a ponta, acho que ele simplesmente atua num nicho de aplicações diferente dos demais e, talvez, não conseguirá "abocanhar" o mercado dos projetos menores.

1

Uma coisa alimenta a outra mesmo, em tudo, isso nem tem nada com a Microsoft. Tem cantores ótimos que só lançam mpusica lio porque é o que o público quer ouvir, e quanto mais fazem isso, mais querem lixo. Mas continua valendo que você não deve ouvir o lixo, tem gente fazendo músicas boas, só não são famosas (continuo com a analogia).

Provavelmente eu não terei condições de fazer isso, tenho outros planos e não posso gastar todo meu tempo com algo que não me dá dinheiro, mas me dá vontade de fazer algo que mostre como fazer o simples com C#/.NET. Óbvio que extremamente simples á para uma linguagem de script mesmo, mas sem furula alguma, linhas de códigos sem nenhum segredo e um punhado de funções, nada mais. Em C# atá dá para fazer isso mas não é adequado.

Vi algumas pessoas comparando com JS que é mais simples o que eu não concordo totalmente. É se fizer Vanilla, oque quase ninguém faz. O Ecossistema de JS é uma atrocidade, e C# tem "vontade de ser" também. Até existem algumas ferramentas que dão uma cara mais simples, que é oque eu falei, falta isso no .NET e você tem que fazer, mas depois de feito fica muito mais simples.

Quando sai do extremamente simples, quase todo mundo que tenha sã consciência vai para TypeScript (que eu já tenho algumas ressalvas), mas é uma linguagem para lidar melhor com projetos que não são tão simples assim. E aí a comparação fica mais iguyal com C#.

O problema não é nenhuma das tecnologias, é do programador que coloca coisas que não são necessárias, ele faz por modinha, ele não sabe programar, ele sabe seguir receitas de bolo, e jura que aquilo é bom, porque disseram que é. E tem caso que a complexidade é necessária, é justificável.

1

tenho amigos grandes programadores PHP que concordam que estão acabando com o PHP com isso. Ao contrário da crença popular PHP hoje é pior que era antes

Tenho que discordar com a parte do PHP é pior do que era antes.

Vejo hoje o PHP extremamente confiável e estável. Acredito que acrescentar tipagem ao PHP foi um grande game changer. Gosto muito de codar nas novas versões dele.

O Laravel, apesar de trazer uma complexidade absurda ao PHP acabou dando uma sobrevida e até reviveu a linguagem.

O Livewire trouxe uma agilidade muito forte ao PHP. Imagina chamar funções do PHP direto do HTML? Eu estava sendo obrigado a trabalhar com VueJS e hoje não vejo mais necessidade por conta do livewire.

Hoje considero o Laravel um excelente framework para projetos que você não precisa se preocupar tanto com desempenho como sistemas de empresas que só irão suportar alguns milhares de funcionários.

Caso precise de algo extremamente simples ainda existe a possibilidade de usar o PHP puro, sem nenhum framework, trazendo com isso toda a simplicidade do PHP antigo.

3

Sim, isso é muito comum na comunidade .NET, sempre está lotada de padrões de projetos que muitas vezes deixa a aplicação super complexa, quando na verdade ela poderia ser muito mais simples... Vejo isso com menos frequência em outras plataformas, como node por exemplo...
Mas pensando em forma de estudo isso irá te diferenciar dos demais, caso um dia faça uma transição de stack :)

2

Boa tarde, Bruo!
Ótima questão, .Net e Java são linguagens enterprise, são feitas e pensadas em aplicações gigantes para corporações, super ricas para tralhar com arquiteturas avançadas.

Dito isto, também podemos fazer coisas simples nestas tecnologias, mas a cultura e padrões envoltos nela puxam para arquiteturas corporativas, mas podemos ser pro-ativos em entender qual padão e qual arquitetura usar em casa situação, então podemos tambem usar .Net ou Java para fazer sofwtares mais simples.

2

Creio que a maior parte já foi respondida pelo maniero e outros, vou falar de "stacks" por que .NET e C# são ligados assim como Node e JavaScript, assim por diante. Muito do que fazemos é utilizar de templates, bibliotecas e frameworks para ajudar no desenvolvimento, e uma aplicação comercial de verdade tem muita coisa pra se preocupar, desde a performance e segurança até monitoramento, ciclo de vida, suporte ao usuário e muitas outras coisas. Em .NET graças ao masoquismo de algumas bibliotecas e através da orientação à objetos, coisas como segurança, logging, tipagem e outras coisas são super simplificadas ao usuário, mas por um custo - seguir a arquitetura deles. Um exemplo disso para JavaScript é o Next.js que facilita o uso de rotas baseadas em arquivo (File-based routing in Next.js).

Você pode seguir arquiteturas muito simples em .NET, nas últimas versões como Minimal APIs nem parece os Controllers MVC de antigamente, mas essas super arquiteturas são "apenas" uma receita para facilitar a implementação de novas features e/ou correções.

Recomendo a leitura de uma forma um pouco menos "técnica" de organizar seus projetos, baseada nas funcionalidades do sistema e não em Controllers, Data e outros

2

Como desenvolvedor .NET posso dizer que realmente, a maioria dos tutoriais são muito complexos e com muitos conceitos de arquitetura, isso porque o .NET é usado em muitos projetos bancários, de alta escala e até legado, um dos principais motivos da Microsoft ter criado o .NET era para não usar mais o Java, que na epoca ja era gigante e robusto, uma dica que posso dar é, não precisa seguir todos os padrões de arquitetura em todo projeto, todo projeto tem seus requisitos, se seu projeto é apenas um CRUD com autenticação e é preciso entregar pro cliente, faça o básico bem feito e que funciona, crie esse senso crítico de entender o que precisa e o que não precisa em um projeto

2

Eu vejo muito disso, principalmente em alguns tutoriais, o que eu recomendo é partir pra essa parada de arquitetura, principalmente quando você já tiver dominado muito bem orientação a objetos, a maioria das arquieteturas usam os conceitos dela e fica mais fácil pra você usar e entender o que vai servir pra que, mas de começo, foca no código, resolver o problema e aprender sobre a linguagem.

2

Sim e Não, isso não é comum da linguagem mas sim do desenvolvedor. Você pode criar um site simples em .NET, embora não seja o adequado pois ele realmente não é feito pra isso, tem outras teclogias mais adequadas, assim como o .NET é mais adequados para certos projetos. Com o tempo você vai entender o que é mais adequado para o que. Eu por exemplo, se vou projetar uma API viu direto no Node, ele é perfeito pra isso, se vou criar um site simples, que vai mais servir conteudo estatico ou dinamico, vou direto ao Astro que é extremamente veloz. É voce que vai definir o que serve para cada proojeto e isso só vem com a experiencia. Por enquanto foca no .NET e mais pra frente vai abrindo o leque.