Princípios S.O.L.I.D.- Por que são importantes para o desenvolvimento de software? (e para sua carreira de dev?)
Caso já tenha uma certa experiência no assunto e queira apenas ver os exemplos práticos, pode pular a próxima seção e ir direto para a seção: Série de Posts sobre SOLID. Caso contrário, te convido a ler todo o post e dar um chance a pequena reflexão proposta. Acredito que seja interessante elaborar alguns porquês antes de simplesmente seguir com os conceitos e exemplos mais específicos.
Por que aprender SOLID (e outros conceitos fundamentais)?
Antes de começar, gostaria de já destacar que esse assunto costuma ser um tema recorrente em entrevistas de emprego para desenvolvedores. Pelo menos, aconteceu comigo várias vezes. Era quase sempre o ponto em comum em todas as entrevistas que passei.
Embora esse aspecto já mereça a sua atenção imediata em relação a carreira, o que pretendo aqui com este artigo e série de posts vai muito além disso. Então já compartilhando uma primeira dica, às vezes até pode fazer sentido aprender um conceito apenas para passar em uma prova/entrevista, porém existem alguns fundamentos que deveríamos de fato aprender e internalizar e em algum grau também aplicar em nossas práticas de forma consciente e progressiva, principalmente se for algo que pode impactar o seu trabalho no médio e longo prazo.
A dica então é: procure aprender um conceito ou técnica por sua importância no mundo real, identificando como e quais problemas ele pretende resolver ou amenizar.
O objetivo é evidenciar a real importância de compreendermos esse assunto… e digo mais, acredito que esse é um daqueles tópicos que deveriamos estar sempre revisitando e aprofundando na medida que vamos adquirindo novas experiências com desenvolvimento.
Para quem está chegando agora na área ou para quem ainda não estava familiarizado com o termo, trata-se de conceitos muito importantes e que costumam fazer parte do dia a dia de Devs e Arquitetos de software (ou ao menos deveria fazer! 😀 ). …mas também não se preocupe se você já está na área e ainda não esbarrou nesses conceitos ou ainda não compreendeu o suficiente. Esse conteúdo é para isso! 😉
No início pode parecer um pouco mais “chatinho” mesmo ou mais complexo do que parece, principalmente por exigir um certo conhecimento em Programação Orientada a Objetos (POO), mas em contrapartida esses príncípios também te ajudaram a “solidificar” seus conhecimentos sobre POO (eu não poderia perder a oportunidade de usar essa palavra! rsrsr…. :D)
Arrisco a dizer aqui que é bastante normal que até mesmo desenvolvedores experientes tenham tido pouco ou nenhum contato com as definições (parte mais teórica) em si, embora muitos até já apliquem parte deles em situações do dia a dia (sem perceber).
Mas como assim? Utilizam, mas não sabem as definições?
Isso mesmo, parece até um pouco contra-intuitivo, mas se for parar para pensar isso acaba acontecendo com a gente em diversas situações do dia a dia não é mesmo!? (e não só da programação). Muitas vezes realizamos uma tarefa prática e aplicamos algum conceito, mas não conseguimos fazer o link com a teoria, ou vice-versa.
Mas afinal, qual a principal finalidade do SOLID?
Indo direto ao ponto, os princípios SOLID visam definir e descrever conceitos fundamentais de orientação a objetos e estabelecer algumas boas práticas relacionadas para codificação e estruturação dos projetos de software.
Se ainda está um pouco na dúvida, não se preocupe… por enquanto o mais importante é saber que o objetivo principal é melhorar a construção e a manutenção dos projetos de software.
Série de Posts sobre SOLID
O objetivo dessa série e contribuir exatamente nesse ponto, tentando representar esses conceitos da forma mais simples possível através de exemplos práticos. Por esse motivo também decidi tratar cada princípio em um post separado.
O termo foi criado por Robert. C. Martin (o famoso Uncle Bob), autor de livros famosinhos entre os devs, como o “Clean Code”, “Clean Archtecture” e outros.
Cada letra do termo S.O.L.I.D corresponde as iniciais de 5 princípios de desenvolvimento de software.
É essencial entender que a definição de princípios como esse não são mera teoria que não tem utilidade prática. Muito pelo contrário, autores como o Uncle Bob, na maioria das vezes tiram lições e se inspiram de suas próprias experiências práticas. E antes que você diga que eu estou puxando o saco do autor, só peço que você se permita a aprender um pouco mais sobre o assunto e perceba você mesmo.
Outra ponderação importante é não tentar sair aplicando tudo quanto é princípio ou pattern por aí só porque você está aprendendo algo novo ou porque acha bonitinho. É sempre necessário ter cuidado antes de sair simplesmente aplicando ou refatorando aplicações de empresas, principalmente quando se trata sistemas que estão em pleno funcionamento (sistemas em produção). Se quiser realmente aplicar ou refatorar, a dica é fazer um pequeno laboratório ou PoC (prova de conceito) antes em um ambiente totalmente separado!
Para iniciarmos no assunto, a seguir vou deixar uma breve descrição sobre cada um dos princípios e os respectivos links dos artigos.
S – Single Responsibility Principle (SRP) – Princípio da Responsabilidade Única (Link disponível do artigo e do vídeo)
O – Open-Closed Principle (OCP) – Princípio Aberto-Fechado (Link disponível do artigo e do vídeo)
L – Liskov Substitution Principle (LSP) – Princípio de Substituição de Liskov (Link disponível do artigo e do vídeo)
I – Interface Segregation Principle (ISP) – Princípio da Segregação de Interfaces (link em breve)
D – Dependency Inversion Principle (DIP) – Princípio da Inversão de Dependência (link em breve)
Como disse o próprio Uncle Bob, os princípios SOLID são os tijolinhos essenciais que poderão ajudar na fundação e estruturação de um bom design de código e até uma boa arquitetura. Acredite! Após entender bem esses conceitos, muitos outros também ficarão mais claros.
Arrisco a dizer que até a sua compreensão de POO irá melhorar. Sinto que sempre que passo por esses princípios e pelos conceitos de POO aprendo algo novo ou compreendo algo sob uma nova perspectiva.
Você também será capaz de entender as motivações por trás de alguns códigos que você vê em projetos por aí e até de decisões de design de código.
Então não vai perder hein! Vamos juntos nesse merge e nessa série! 😀
Essa foi apenas a introdução, não deixe de curtir, comentar e compartilhar os posts e vídeos da série.
É um gesto fácil para você, mas que tem um grande poder de ajudar esse projeto e claro, o seu desenvolvimento! 🙂