Boa tarde (ou tarde ou manhã, dependendo da publicação deste post).
Quero falar sobre a parte de elite da programação e transmitir, em geral, uma idéia óbvia para iniciantes no desenvolvimento de back-end (e não apenas), ao longo do caminho, usando a tentativa de começar a escrever em Habré.
Então
Qualquer programador com pelo menos um pouco de bom gosto, que começou a programar por vontade própria, depois de entender o básico da linguagem e escrever os primeiros projetos, será perguntado não "como fazer algo", mas "como fazer algo certo" e "quais são os padrões beleza ".
É claro que essas perguntas verdadeiras o levarão mais cedo ou mais tarde aos nomes obscuros "Abstract Factory", "Singleton", "Mediador" e as abreviaturas igualmente compreensíveis SOLID, GRASP.
Observe que eu não citei o exemplo de OOP, MVC, ORM - esses são conceitos com um significado e escopo muito específicos, com um nível mínimo de abstração.
OOP diz: "Cara, eu encontrei uma maneira clara e compreensível de apresentar programas".
O MVC diz: "cara, seria melhor se você dividisse o código, e as regras de separação estejam sob o corte".
ORM diz: "pss, cara, acabei de encontrar uma maneira de reconciliar duas ideologias diferentes - OOP e DB".
Tudo está claro aqui.
Estou falando de coisas que envolvem um nível máximo de abstração. Um exemplo:
"Mediador":
as pessoas, se você tiver muitos objetos diferentes, crie uma central, conecte tudo a ela.
O programador parecerá estranho em sua direção; se for sociável, dirá "obrigado, boné!". E pelos olhos, ele chamará nada mais do que "evidência de capitão".
O mesmo vale para os outros padrões:
"Fábrica":
pessoas, você sabia que pode construir objetos usando outra classe?
"Mapeador de dados":
por que você não usa uma camada extra de abstração para salvar dados?
"Observador":
cara, mas vamos pegar algumas interfaces?
"Estratégia":
Você sabe o que é polimorfismo?
E especialmente o SOLID:
S (responsabilidade única):
um módulo deve executar apenas uma tarefa, não se esqueça disso!
I (segregação de interface):
use interfaces diferentes para operações diferentes!
Bem e assim por diante.
Levo ao fato de que a principal área de aplicação de padrões não está acostumada a bom código. Padrões são necessários para discutir um programa já escrito por alguém, para formalizar um bom código. Para que você possa dizer (“para que serve essa classe?” - “ah, isso faz parte do intermediário”). Mas não para verificar seus escritos com os padrões uml do ataque convulsivo "aah, que padrão aplicar neste caso?".
Um programador que seja fluente em algum tipo de conceito (por exemplo, acima) escreverá o próprio código usando as práticas recomendadas, mesmo que não tenha ouvido uma palavra sobre elas. E essas mesmas práticas recomendadas são necessárias para formalizar o relacionamento de sua equipe com o seu código - e a essência por aqui é, obviamente, o GRASP.
O que eu gostaria de dizer aos programadores iniciantes:
- Aprenda conceitos, não padrões. Conceitos são realmente importantes.
- se você repentinamente perceber que não conhece os padrões, não entre em pânico. Isso só importa para o recrutador, mas não para o seu código e bom estilo.
O que eu gostaria de dizer ao guru de Habr:
- Eu posso estar errado. Sério.
- Entendo que a ideia é comum. Mas, no entanto, por algum motivo, muitas vezes encontro uma abordagem semelhante para iniciantes.
- Com base no parágrafo 2, um artigo semelhante já pode ter sido escrito antes de mim. Eu não sei
E finalmente: o artigo, é claro, é subjetivo, não exorto ninguém (a combater as fábricas) a nada. Esta é apenas a minha opinião :)
Além disso, sou apenas um júnior, mas essa abordagem - prestar muita atenção aos detalhes - sempre me levou a um mal-entendido.
Tenham um bom dia!