Os princípios SOLID foram introduzidos pela primeira vez em 2000 no artigo Design Principles and Design Patterns de Robert Martin, também conhecido como Uncle Bob.
Duas décadas se passaram desde então. Surge a pergunta - esses princípios ainda são relevantes?
Esta é uma tradução do artigo do Tio Bob, publicado em outubro de 2020, no qual ele discute a relevância dos princípios SOLID para o desenvolvimento moderno.
Recentemente, recebi um e-mail com algumas das seguintes considerações:
Durante anos, o conhecimento dos princípios SOLID foi o padrão na contratação. Esperava-se que os candidatos confiassem nesses princípios. Mais tarde, porém, um de nossos gerentes, que quase nunca escreve código, se perguntou se isso era razoável. Ele argumentou que o princípio aberto-fechado tornou-se menos importante, uma vez que, na maioria das vezes, não escrevemos mais código para grandes monólitos. E fazer alterações em microsserviços compactos é seguro e fácil.
O princípio de substituição de Liskov está há muito desatualizado, porque não prestamos mais atenção à herança como fazíamos 20 anos atrás. Acho que devemos considerar a posição de Dan North sobre SOLID - “Write Simple Code”
Em resposta, escrevi a seguinte carta.
Os princípios SOLID permanecem tão relevantes hoje quanto eram há 20 anos (e antes disso). Porque o software não mudou muito ao longo dos anos, o que por sua vez é uma consequência do fato de que o software não mudou muito desde 1945, quando Turing escreveu as primeiras linhas de código para um computador eletrônico. O software ainda é operadores if
, loops while
e operações de atribuição - Sequência, Seleção, Iteração .
Cada nova geração gosta de pensar que seu mundo é muito diferente do mundo da geração anterior. Cada nova geração está errada sobre isso, o que eles descobrem assim que a próxima geração chega para lhes dizer o quanto as coisas mudaram. <risos>
Então, vamos examinar os princípios em ordem.
SRP - Single Responsibility Principle .
, . , .
, . - . SQL- . , , , . , , , .
. , , .
, ( , , ). SRP - “ ”. . SRP - .
OSP - Open-Closed Principle -
, .
, - , . , , , . , , ? if
, , ?
... ? - , ? !
(. , , )
. ó - . , , . - “ ”. . , . .
LSP - Liskov Substitution Principle
, , .
( ) , . . . , . , , . , if/switch
.
- . .
, . - , .
ISP - Interface Segregation Principle
, .
- . , , . , - A B , , B A.
, Java, C#, C++, GO, Swift .. , - Maven Leiningen .
(. “ , ” “ !!”)
(. “ - !”)
, , (SRP). .
DIP - Dependency Inversion Principle
. .
, . - . , , . , , , SQL-, . . , , , , , .
Em cada caso, os slides de Den terminam com a frase “Escreva código simples”. Este é um bom conselho. No entanto, se os anos nos ensinaram alguma coisa, é que a simplicidade requer disciplina guiada por princípios. São esses princípios que definem a simplicidade. É essa disciplina que leva os programadores a escrever código simples.
A melhor maneira de criar confusão é dizer a todos “mantenha as coisas simples” e não dar mais instruções.