Skip to content

Instantly share code, notes, and snippets.

@danilobatistaqueiroz
Last active May 11, 2019 18:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danilobatistaqueiroz/97b8d0f4ab9a7f08e20008ecb3c6dc02 to your computer and use it in GitHub Desktop.
Save danilobatistaqueiroz/97b8d0f4ab9a7f08e20008ecb3c6dc02 to your computer and use it in GitHub Desktop.
SOLID Principles

The principles are a subset of many principles promoted by American software engineer and instructor Robert C. Martin.

Single responsibility principle
A class should have only a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the class.
Um bom exemplo seria uma classe "Encomenda", ela não pode ter métodos para alterar a "NotaFiscal".
Um exemplo mais abstrato seria evitar criar classes multi funções, como encontramos demasiadamente na camada de "serviços", ou mesmo nas "controllers", quando elas deveriam apenas orquestrar os requests e responses, essa é a única responsabilidade das "controllers". Pois, se você começar a implementar muita coisa na "controller", seu código torna-se dependente do framework, e na melhor das hipóteses, torna o teu "domínio" amarrado à web o que nunca é boa ideia.
Outro exemplo seria uma classe "ProdutoValidador", nessa classe não pode haver métodos que alterem o produto, por que a única responsabilidade de um validador, é validar e informar sobre a consistência dos dados.

Open–closed principle
"Software entities ... should be open for extension, but closed for modification."

Liskov substitution principle
"Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program." See also design by contract.

Interface segregation principle
"Many client-specific interfaces are better than one general-purpose interface."

Dependency inversion principle
One should "depend upon abstractions, [not] concretions."

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment