Cocoaheads Brasil SP - 26/04/16 - SOLID
-
Upload
bruno-mazzo -
Category
Technology
-
view
122 -
download
1
Transcript of Cocoaheads Brasil SP - 26/04/16 - SOLID
![Page 1: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/1.jpg)
S.O.L.I.D
![Page 2: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/2.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/3.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/4.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/5.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/6.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/7.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/8.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/9.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/10.jpg)
Pseudo código
![Page 11: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/11.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/12.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/13.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/14.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/15.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/16.jpg)
Liskov substitution principe
• Não se aplica. Não temos nenhuma subclasse.
![Page 17: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/17.jpg)
Interface segregation principle
• A interface da classe fica grande porque existe muitas operações.
![Page 18: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/18.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/19.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/20.jpg)
Criando os "blocos"
![Page 21: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/21.jpg)
![Page 22: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/22.jpg)
![Page 23: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/23.jpg)
![Page 24: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/24.jpg)
![Page 25: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/25.jpg)
![Page 26: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/26.jpg)
![Page 27: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/27.jpg)
![Page 28: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/28.jpg)
![Page 29: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/29.jpg)
![Page 30: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/30.jpg)
![Page 31: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/31.jpg)
![Page 32: Cocoaheads Brasil SP - 26/04/16 - SOLID](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/32.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022051706/58eb37ab1a28ab71028b4765/html5/thumbnails/33.jpg)
Obrigado
• Dúvidas?