princípios solid

77
Princípios SOLID André Minelli Agosto/2017

Upload: andre-minelli

Post on 22-Jul-2015

634 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Princípios SOLID

Princípios SOLID

André MinelliAgosto/2017

Page 2: Princípios SOLID

O que é software de qualidade?

Page 3: Princípios SOLID

Software de Qualidade:

Alta Coesão

e

Baixo Acoplamento

Page 4: Princípios SOLID

Sintomas da Baixa Qualidade:

Page 5: Princípios SOLID

Sintomas da Baixa Qualidade:

• Rigidez

Page 6: Princípios SOLID

Sintomas da Baixa Qualidade :

• Rigidez

• Fragilidade

Page 7: Princípios SOLID

Sintomas da Baixa Qualidade :

• Rigidez

• Fragilidade

• Imobilidade

Page 8: Princípios SOLID

Sintomas da Baixa Qualidade :

• Rigidez

• Fragilidade

• Imobilidade

Page 9: Princípios SOLID

Then what???

Page 10: Princípios SOLID

S.O.L.I.D.

to the rescue!

Page 11: Princípios SOLID

Lembre-se!

Princípio ≠ Regra

Page 12: Princípios SOLID

Single Responsibility Principle (SRP)

Open-Closed Principle (OCP)

Liskov Substitution Principle (LSP)

Interface Segregation Principle (ISP)

Dependency Inversion Principle (DIP)

Page 13: Princípios SOLID

Single Responsibility Principle (SRP)

“Uma classe deve ter somente umarazão para mudar”

Page 14: Princípios SOLID

Responsabilidade = O que a classe faz?

Responsabilidade Única = Alta Coesão!

Page 15: Princípios SOLID

Quanto mais for feito, maior será a chance de alterar!

Quanto mais for alterado, maior será a chance de introduzir bugs!

Page 16: Princípios SOLID

Benefícios:

Page 17: Princípios SOLID

Benefícios:

• Reuso

Page 18: Princípios SOLID

Benefícios:

• Reuso

• Clareza

Page 19: Princípios SOLID

Benefícios:

• Reuso

• Clareza

• Nomeação

Page 20: Princípios SOLID

Benefícios:

• Reuso

• Clareza

• Nomeação

• Leitura Fácil

Page 21: Princípios SOLID

Críticas:

Page 22: Princípios SOLID

Críticas:

• ‘Granularidade’ da Responsabilidade

Page 23: Princípios SOLID

Críticas:

• ‘Granularidade’ da Responsabilidade

• Explosão de classes

Page 24: Princípios SOLID

DEMO

Page 25: Princípios SOLID

Open-Closed Principle (OCP)

“Módulos devem ser abertos para extensão e fechados para modificação”

Page 26: Princípios SOLID

• Aberto para extensão

Comportamento pode ser estendido

• Fechado para modificação

Estender não significa alterar o códigooriginal diretamente

Page 27: Princípios SOLID

Técnicas:

Page 28: Princípios SOLID

Técnicas:

• Parametrização

Page 29: Princípios SOLID

Técnicas:

• Parametrização

• Herança

Page 30: Princípios SOLID

Técnicas:

• Parametrização

• Herança

• Eventos

Page 31: Princípios SOLID

Técnicas:

• Parametrização

• Herança

• Eventos

• Métodos de extensão

Page 32: Princípios SOLID

Técnicas:

• Parametrização

• Herança

• Eventos

• Métodos de extensão

• Composição

Page 33: Princípios SOLID

Benefícios:

Page 34: Princípios SOLID

Benefícios:

• Bugs apenas em código novo

Page 35: Princípios SOLID

Benefícios:

• Bugs apenas em código novo

• Baixo acoplamento

Page 36: Princípios SOLID

Críticas:

• Exige planejamento antecipado

Page 37: Princípios SOLID

DEMO

Page 38: Princípios SOLID

Liskov Substitution Principle (LSP)

“Tipos derivados devem podersubstituir seu tipo base”

Page 39: Princípios SOLID

Código não deve precisar saber que o tipo atual é um sub-tipo específico

Page 40: Princípios SOLID

Violação Mais Comum:

if (obj is <SubType>)

Page 41: Princípios SOLID

O comportamento deve serindistinguível entre tipo base e

qualquer sub-tipo

Page 42: Princípios SOLID

Violações Comuns em Sub-tipos:

• Lançar novas exceções

Page 43: Princípios SOLID

Violações Comuns em Sub-tipos:

• Lançar novas exceções

• Pré-condições mais restritivas

Page 44: Princípios SOLID

Violações Comuns em Sub-tipos:

• Lançar novas exceções

• Pré-condições mais restritivas

• Pós-condições menos restritivas

Page 45: Princípios SOLID

Violações Comuns em Sub-tipos:

• Lançar novas exceções

• Pré-condições mais restritivas

• Pós-condições menos restritivas

• Invariantes menos restritivos

Page 46: Princípios SOLID

Soluções Comuns:

Page 47: Princípios SOLID

Soluções Comuns:

• Documentação

Page 48: Princípios SOLID

Soluções Comuns:

• Documentação

• Utilizar Code Contracts For .NET

Page 49: Princípios SOLID

Soluções Comuns:

• Documentação

• Utilizar Code Contracts For .NET

• Criar hierarquias separadas

Page 50: Princípios SOLID

Soluções Comuns:

• Documentação

• Utilizar Code Contracts For .NET

• Criar hierarquias separadas

• Aplicar “Tell, Don´t Ask” Principle

Page 51: Princípios SOLID

DEMO

Page 52: Princípios SOLID

Interface Segregation Principle (ISP)

“Clientes não devem ser forçados a depender de interfaces que eles não

usam”

Page 53: Princípios SOLID

Não crie interfaces grandes(com vários métodos)!

Interface menor => Alta Coesão

Page 54: Princípios SOLID

Benefícios:

Page 55: Princípios SOLID

Benefícios:

• Facilidade para implementar

Page 56: Princípios SOLID

Benefícios:

• Facilidade para implementar

• Mais fácil de usar

Page 57: Princípios SOLID

DEMO

Page 59: Princípios SOLID

Na maioria das vezes bastaria:

bool ValidateUser(string username, string password)

Page 61: Princípios SOLID

Dependency Inversion Principle (DIP)

“Dependa de abstrações, não dependade implementações”

Page 62: Princípios SOLID

Infraestrutura

Aplicação

Page 63: Princípios SOLID

Infraestrutura

AplicaçãoAbstração da Infraestrutura

Page 64: Princípios SOLID

Técnicas:

Page 65: Princípios SOLID

Técnicas:

• Strategy pattern

Page 66: Princípios SOLID

Técnicas:

• Strategy pattern

• Adapter pattern

Page 67: Princípios SOLID

Técnicas:

• Strategy pattern

• Adapter pattern

• Dependency Injection

Page 68: Princípios SOLID

Benefícios:

Page 69: Princípios SOLID

Benefícios:

• Bugs apenas em código novo

• Baixo acoplamento

Page 70: Princípios SOLID

Benefícios:

• Bugs apenas em código novo

• Baixo acoplamento

• Testabilidade

Page 71: Princípios SOLID

Benefícios:

• Bugs apenas em código novo

• Baixo acoplamento

• Testabilidade

• Extensibilidade

Page 72: Princípios SOLID

Críticas:

• Menos controle sobre detalhes

Page 73: Princípios SOLID

Críticas:

• Menos controle sobre detalhes

• “Navegação” é mais difícil

Page 74: Princípios SOLID

DEMO

Page 75: Princípios SOLID

Lembre-se!

Princípio ≠ Regra

Page 76: Princípios SOLID

“Programar não é apenasescrever código, assim como

cozinhar não é apenas misturaringredientes”

Page 77: Princípios SOLID

Referências:• http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOo

d• http://www.infoq.com/presentations/design-principles-

code-structures• http://www.slideshare.net/Hitheshh/solid-31661700• http://channel9.msdn.com/Events/TechEd/NorthAmerica/2

014/DEV-B315• http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id

=92• https://docs.microsoft.com/en-

us/dotnet/framework/debug-trace-profile/code-contracts• http://simpleinjector.readthedocs.io/en/latest/Interception

Extensions.html