33
S.O.L.I.D

Cocoaheads Brasil SP - 26/04/16 - SOLID

Embed Size (px)

Citation preview

Page 1: Cocoaheads Brasil SP - 26/04/16 - SOLID

S.O.L.I.D

Page 2: Cocoaheads Brasil SP - 26/04/16 - SOLID

O que é S.O.L.I.D?

• Cinco princípios criados por Robert C. Martin (Uncle Bob)

• São guidelines para construir código legível e extensível.

Page 3: Cocoaheads Brasil SP - 26/04/16 - SOLID

S.O.L.I.D.

• S - Single responsibility principe

• O - Open-closed principe

• L - Liskov substitution principe

• I - Interface segregation principe

• D - Dependency inversion principe

Page 4: Cocoaheads Brasil SP - 26/04/16 - SOLID

Single responsibility principe

• Uma classe deve ter apenas uma única responsabilidade.

• Responsabilidade = A classe só deve mudar por apenas um motivo

Page 5: Cocoaheads Brasil SP - 26/04/16 - SOLID

Open-closed principe

• Uma classe deve ser aberta para extensão e fechada para modificação

• Devemos evitar ao máximo modificar código. Devemos criar classes que possam ter seu comportamento modificado sem necessidade de se alterar o código.

Page 6: Cocoaheads Brasil SP - 26/04/16 - SOLID

Liskov substitution principe

• Subclasses devem conseguir ser usadas em qualquer local das classes pais.

• Subclasses não podem restringir o funcionamento de suas superclasses

Page 7: Cocoaheads Brasil SP - 26/04/16 - SOLID

Interface segregation principe

• Nenhuma classe deve implementar métodos que ela não precisa.

• Interfaces devem conter o mínimo necessários

Page 8: Cocoaheads Brasil SP - 26/04/16 - SOLID

Dependency inversion principe

• Modulos de alto nível não devem depender de modulos de baixo nível. Ambos devem depender de abstração

• Abstração não deve depender de implementação. Implementação deve depender de abstração.

Page 9: Cocoaheads Brasil SP - 26/04/16 - SOLID

Caso de Uso• Cenário:

• Já existia um código com as seguintes especificações:

• Formatava os emails

• Enviava emails

• Era tentado realizar o envio no máximo três vezes por email

• Cada tentativa era realizado o Log de erro ou sucesso.

Page 10: Cocoaheads Brasil SP - 26/04/16 - SOLID

Pseudo código

Page 11: Cocoaheads Brasil SP - 26/04/16 - SOLID

S.O.L.I.D

• Esse código funciona?

• Esse código tem algum problema?

• É fácil de adicionar novas funcionalidades?

• S.O.L.I.D. é sobre código fácil de dar manutenção e de se alterar

Page 12: Cocoaheads Brasil SP - 26/04/16 - SOLID

Nova especificação• Iria existir agora dois tipos de envio:

• A lógica de envio seria diferente porque seria usado um novo serviço para um grupo de clientes

• A lógica de Log seria diferente por questões técnicas desse novo serviço

• A formatação seria outra para esses clientes

Page 13: Cocoaheads Brasil SP - 26/04/16 - SOLID

Nova especificação

• O modo antigo ainda vai continuar existindo

• Não se sabe se no futuro haverá outras mudanças desse tipo.

Page 14: Cocoaheads Brasil SP - 26/04/16 - SOLID

Single responsibility

• Enviar email

• Gerar log

• Realizar tentativas

• Formatar o email

• Escolher o tipo de método de envio

Page 15: Cocoaheads Brasil SP - 26/04/16 - SOLID

Open-closed

• O único ponto de extensão é a quantidade de tentativas

• Problemas

• Classe não é reutilizável

• Mudanças obrigam mudar o código fonte (o que pode causar erros)

Page 16: Cocoaheads Brasil SP - 26/04/16 - SOLID

Liskov substitution principe

• Não se aplica. Não temos nenhuma subclasse.

Page 17: Cocoaheads Brasil SP - 26/04/16 - SOLID

Interface segregation principle

• A interface da classe fica grande porque existe muitas operações.

Page 18: Cocoaheads Brasil SP - 26/04/16 - SOLID

Dependency Inversion• A classe cria objetos criando dependencias implicitas

• Problemas

• Dificulta a criação de testes unitários

• Impede a interceptação de chamadas

• Fixa módulos de alto nível com módulos de baixo nível (quem toma decisões de negócio é a mesma classe que trabalha com framework de envio de email)

Page 19: Cocoaheads Brasil SP - 26/04/16 - SOLID

Vantagens• Com S. criamos pequenos blocos de lógica

independentes

• Com O. permitimos que esses blocos sejam configuráveis

• Com L. garantimos que podemos alternar entre qualquer um dos blocos sem quebrar o código

• Com I. criamos um padrão de blocos que são fácil de serem construídos

• Com D. podemos configurar e montar da maneira que nos for interessante

Page 20: Cocoaheads Brasil SP - 26/04/16 - SOLID

Criando os "blocos"

Page 21: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 22: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 23: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 24: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 25: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 26: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 27: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 28: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 29: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 30: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 31: Cocoaheads Brasil SP - 26/04/16 - SOLID
Page 32: Cocoaheads Brasil SP - 26/04/16 - SOLID

Conclusão• O maior benefício não é no código que já existe,

mas sim na implementação de novas funcionalidades

• Fazer S.O.L.I.D. é como brincar de LEGO, você tem um monte de peças e só encaixa para formar uma peça maior

• O resultado é um código simples, configurável, com menor dependência de frameworks externos e fácil de testar

Page 33: Cocoaheads Brasil SP - 26/04/16 - SOLID

Obrigado

• Dúvidas?