SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11...

37
Trilha Design de Código SOLID numa abordagem real

Transcript of SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11...

Page 1: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Trilha Design de Código

SOLID numa abordagem real

Page 2: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Lucas Souto Maior

Projeto CIn/Samsung Engenheiro de [email protected]

linkedin.com/in/lucas-souto-maior-b69b2083

github.com/soutolucas

2

Page 3: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Proposta da apresentação

▷ Falar das minhas experiências ao fazer uso do SOLID no meu dia-a-dia de desenvolvimento de software

▷ Exemplificar através de cenários mais reais, não apenas exemplos de código didáticos

▷ Os códigos exibidos foram adaptados devido a confidencialidade dos projetos

3

Page 4: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Alguém já se sentiu assim?!

4

Page 5: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

“SOLID é um acrônimo para 5 princípios da programação orientada a objetos e design

de código identificados por Robert C. Martin (Uncle Bob)

5

Page 6: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

6

SOLID

SingleResponsability

OpenClosed

DependencyInversion

InterfaceSegregation

LiskovSubstitution

Page 7: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

BenefíciosFacilidade em manter, estender, ajustar, testar (Usar todo o potencial da Programação Orientada a Objetos)

7

Page 8: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

S - Single responsibility principle

8

“Uma classe deve ter somente uma razão para mudar”

Isso se aplica não apenas a classes, mas também a funções, arquivos, etc

SingleResponsability

Page 9: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

S - Single responsibility principle

9

SingleResponsability

Page 10: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Problemas encontrados por falta de coesão:

▷ Dificuldade de compreensão e reuso

▷ Muitas responsabilidades podem tornar difícil alterar uma parte sem comprometer outra

▷ A classe tem um número excessivo de dependências (alto acoplamento), ficando mais sujeita a mudanças

10

SingleResponsability

Page 11: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

S - Single responsibility principle

11

SingleResponsability

Page 12: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

S - Single responsibility principle

12Nem sempre é fácil...

SingleResponsability

TotalValue?!

Page 13: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

13

“Entidades de software (classes, módulos, funções etc) devem ser abertas para extensão mas fechadas para modificação”

OpenClosed

Page 14: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

14

Problema:

Gostaria de uma classe que efetue pagamentos

o Preciso checar se há saldo antes de executar o pagamento;

o O pagamento pode ser realizado em dinheiro, cartão ou boleto bancário

LiskovSubstitution

OpenClosed

Page 15: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

15

LiskovSubstitution

OpenClosed

Page 16: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

16

LiskovSubstitution

Apenas para encapsular a chamada para um serviço de

Balance.

OpenClosed

Page 17: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

17

LiskovSubstitution

Uma experiência real frustrada...

OpenClosed

Page 18: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

O - Open/closed principle

18

LiskovSubstitution

Requisitos mudam e as classes Email e SpecificEmail passam a ter comportamentos iguais.

Surge uma nova particularidade na Sms e a TransferBase começa a ser impactada!!

Tenha muito cuidado com o tipo de abstração que você está criando!

OpenClosed

Page 19: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

19

O Princípio de Substituição de Liskov leva esse nome por ter sido criado por Barbara Liskov, em 1988.

“As classes base devem ser substituíveis por suas classes derivadas.”

Barbara Liskov

LiskovSubstitution

Page 20: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

20

O problema do pato...

LiskovSubstitution

LiskovSubstitution

Page 21: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

21

InterfaceSegregation

LiskovSubstitution

Page 22: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

22

InterfaceSegregation

Poderíamos criar uma classe para patos que voam e outra para patos que não voam, ambas herdando de Pato. A minha classe herdaria da classe “PatosQueNaoVoam” e as demais aves herdariam da classe “PatosQueVoam”. O que vocês acham?

LiskovSubstitution

Page 23: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

23

InterfaceSegregation

Eu não grasno

Podemos usar o padrão de projeto Strategy!!

...surge um pato de madeira.Liskov

Substitution

Page 24: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

24

InterfaceSegregation

LiskovSubstitution

Page 25: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

L - Liskov substitution principle

25

“Crie suas classes pensando em herança, ou então proíba-a”Joshua Bloch

o No começo das linguagens orientadas a objeto, a herança era usada para vender a ideia

o Mas, utilizar herança pode não ser tão simples. É fácil cair em armadilhas criadas por hierarquias de classes longas ou confusas

LiskovSubstitution

Page 26: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

I - Interface segregation principle

26

“Clientes não devem ser forçados a depender de métodos que não usam”

InterfaceSegregation

Page 27: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

I - Interface segregation principle

27

InterfaceSegregation

Page 28: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

I - Interface segregation principle

28

InterfaceSegregation

Page 29: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

I - Interface segregation principle

29

Já tentei de outras formas. Deu certo?

InterfaceSegregation

Page 30: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

I - Interface segregation principle

30

E a quantidade de métodos numa interface?

InterfaceSegregation

Page 31: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

D - Dependency inversion principle

31

“Módulos de alto nível

não devem depender de

módulos de baixo nível.

Ambos devem depender

de abstrações.

Abstrações não devem

depender de detalhes.

Detalhes devem

depender de abstrações.”

DependencyInversion

Page 32: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

D - Dependency inversion principle

32

DependencyInversion

Page 33: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

D - Dependency inversion principle

33

DependencyInversion

Page 34: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

D - Dependency inversion principle

34

Mais um ponto importante

sobre depender de interfaces…

DependencyInversion

Page 35: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Use os princípios SOLID como guia. Não leve tudo ao “pé da letra”

35

Considerações finais

Após conhecê-los, cuidado com a vontade de sair refatorando tudo

Não tenha muito apego pelo design de código que você criou, mude caso seja necessário

Ficou ruim pra testar o código? Reavalie

Compartilhe conhecimento com sua equipe

Page 36: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Indicações de leitura

36

Page 37: SOLID numa abordagem real - Amazon S3 · 2019. 10. 11. · S - Single responsibility principle 11 Single Responsability. S - Single responsibility principle 12 Nem sempre é fácil...

Obrigado!Dúvidas?

37