Skip to content

Instantly share code, notes, and snippets.

@fhferreira
Last active August 29, 2015 13:57
Show Gist options
  • Select an option

  • Save fhferreira/9792157 to your computer and use it in GitHub Desktop.

Select an option

Save fhferreira/9792157 to your computer and use it in GitHub Desktop.

SOLID e Best Practices

O que é SOLID?
O que cada letra significa + exemplos
Best Practices
Progressive enhancement
Conclusão

NO CARGO CULT PROGRAMMING - "NÃO EXISTE BALA DE PRATA"

Quando falamos de SOLID, na verdade é S.O.L.I.D.
É uma sigla
Criado/nomeado por Michael Feathers/Robert C. Martin (Uncle Bob)
São 5 princípios

S -> SRP -> Single Responsibility Principle

O -> OCP -> Open-closed Principle

L -> LSP -> Liskov Substitution Principle

I -> ISP -> Interface Segregation Principle

D -> DIP -> Dependecy Inversion Principle

S -> SRP -> Single Responsibility Principle

Principio da Responsabilidade Única -> Defina o Papel.

O -> OCP -> Open-closed Principle

"The Open Closed principle of SOLID design states that code is open for extension but closed for modification."
Aberto para estensão, fechado para modificação.

L -> LSP -> Liskov Substitution Principle

"This principle states that objects should be replaceable with instances of their subtypes without altering the correctness of that program. "
Objetos devem poder ser substituidos por seus sub-tipos sem ter que alterar o fluxo do sistema.

I -> ISP -> Interface Segregation Principle

"This principle states that no implementation of an interface should be forced to depend on methods it does not use. "
A implementação não devem ser obrigadas a depender de métodos que não utilizam

D -> DIP -> Dependecy Inversion Principle

"This principle states that high-level code should not depend on low-level code, and that abstractions should not depend upon details. "
Necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema. Nesta solução as dependências entre os módulos não são definidas programaticamente, mas sim pela configuração de uma infraestrutura de software (container) que é responsável por "injetar" em cada componente suas dependências declaradas. A Injeção de dependência se relaciona com o padrão Inversão de controle mas não pode ser considerada um sinônimo deste.

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