83
ABRACE A MUDANÇA COM CÓDIGO @marcosbrizeno

Abraçando a mudança com Código

Embed Size (px)

Citation preview

Page 1: Abraçando a mudança com Código

ABRACE A MUDANÇA COM CÓDIGO

@marcosbrizeno

Page 2: Abraçando a mudança com Código

QUEBRANDO O GELO!

2

Page 3: Abraçando a mudança com Código

FORMANDO TRIÂNGULOS

3http://www.funretrospectives.com/forming-triangles/

Ande em uma direção aleatória até ouvir a palavra

"Triângulo"

Quando ouvir, pare e tente formar um triângulo com

os outros participantes

Page 4: Abraçando a mudança com Código

AGENDA

$> Mudança em projetos Ágeis $> O patinho fail $> Strategy - Dividir para simplificar $> Adapter - Seja como a água $> Factory - Gerenciando objetos $> Transformando o patinho fail

4

Page 5: Abraçando a mudança com Código

A ÚNICA CONSTANTE É A MUDANÇAA profecia autorrealizável

5

Page 6: Abraçando a mudança com Código

A PROFECIA AUTORREALIZÁVEL

O seu projeto vai mudar!

6

Page 7: Abraçando a mudança com Código

A PROFECIA AUTORREALIZÁVEL

7

“Be water my friend.” - Bruce Lee

Page 8: Abraçando a mudança com Código

A PROFECIA AUTORREALIZÁVEL

8

Page 9: Abraçando a mudança com Código

DESENVOLVIMENTO ÁGIL

Fortemente baseado em pessoas e colaboração

9

Page 10: Abraçando a mudança com Código

DESENVOLVIMENTO ÁGIL

Ciclo de feedback reduzido

10

Page 11: Abraçando a mudança com Código

DESENVOLVIMENTO ÁGIL

Envolvimento com o cliente e usuários o tempo todo

11

Page 12: Abraçando a mudança com Código

DESENVOLVIMENTO ÁGIL

Exploração e aprendizado

12

Page 13: Abraçando a mudança com Código

CÓDIGO ÁGIL?

13

“Talk is cheap. Show me the code.”

- Linus Torvalds

Page 14: Abraçando a mudança com Código

CÓDIGO ÁGIL?

14

Page 15: Abraçando a mudança com Código

CÓDIGO ÁGIL?

Código no centro de tudo

15

Page 16: Abraçando a mudança com Código

CÓDIGO ÁGIL?

16

CÓDIGO LIMPOPADRÕES DE PROJETO

SOLID

TDDDOCUMENTADO

TESTÁVELEFICIENTE

LEGÍVEL

FUNCIONA

FÁCIL DE IMPLANTAR

INTEGRAÇÃO CONTÍNUA

PAREAR

Page 17: Abraçando a mudança com Código

CÓDIGO ÁGIL?

17

Page 18: Abraçando a mudança com Código

O REI ESTÁ NÚ!

18

SCRUM NÃO RESOLVE O SEU

PROBLEMA

Page 19: Abraçando a mudança com Código

O REI ESTÁ NÚ!

19

Waterfall: Vamos entregar o projeto próximo ano!

Agile: Vamos entregar pequenos MVPs até o próximo ano!

Page 20: Abraçando a mudança com Código

O REI ESTÁ NÚ!

20

Um ano depois

Page 21: Abraçando a mudança com Código

O REI ESTÁ NÚ!

21

Waterfall: Não era bem o que eu queria… Vamos ter que fazer de novo…

Agile: Nosso produto já está sendo utilizado!

Page 22: Abraçando a mudança com Código

O REI ESTÁ NÚ!

22

De que adianta o feedback se não consigo agir nele?

Page 23: Abraçando a mudança com Código

O REI ESTÁ NÚ!

23

SCRUM SOZINHO NÃO RESOLVE O SEU

PROBLEMA

Page 24: Abraçando a mudança com Código

COMO ABRAÇAR A MUDANÇA COM CÓDIGO

24

Page 25: Abraçando a mudança com Código

PATINHO FAIL

25

Page 26: Abraçando a mudança com Código

EU S2 LIVROSe o padrão Strategy

26

Page 27: Abraçando a mudança com Código

O EU S2 LIVROS

Plataforma para juntar livros e pessoas (leitores/autores) Precisa ser de fácil acesso

Permitir o login através de várias redes sociais existentes

27

Page 28: Abraçando a mudança com Código

API DOS SERVIÇOS

28

API FaceNote: FACE_NOTE_SUCESSO = 200 FACE_NOTE_REVOCADO = 403 FACE_NOTE_BLOQEUADO = 408

API Zuiter: ZUITER_SUCESSO = 202 ZUITER_PENDENTE = 400 usuários apenas em downcase

Page 29: Abraçando a mudança com Código

DESIGN E ARQUITETURA

29

Login

ServicoFaceNoteLogin

informação do

usuário

API FaceNote

dados formatados para a API

código de

resposta

status e mensagem

Page 30: Abraçando a mudança com Código

IMPLEMENTAÇÃO DO LOGIN

30

def self.com(parametros)

resposta = if parametros[:metodo] == :facenote ServicoFaceNoteLogin.autenticar(parametros[:dados]) elsif parametros[:metodo] == :zuiter parametros[:dados][:usuario].downcase! ServicoZuiterLogin.autenticar(parametros[:dados]) end

Page 31: Abraçando a mudança com Código

IMPLEMENTAÇÃO DO LOGIN

31

if resposta == FACE_NOTE_SUCESSO || resposta == ZUITER_SUCESSO status, mensagem = true, 'login com sucesso' elsif resposta == FACE_NOTE_REVOCADO status, mensagem = false, 'acesso revocado' elsif resposta == FACE_NOTE_BLOQEUADO status, mensagem = false, 'aplicação bloqueada' elsif resposta == ZUITER_PENDENTE status, mensagem = false, 'autorização pendente' end

Page 32: Abraçando a mudança com Código

EXEMPLO DE PARÂMETRO

32

parametros = { metodo: :facenote, dados: { usuario: 'Gil' } }

Page 33: Abraçando a mudança com Código

LOGIN VIA HOOGLEExtensão do problema

33

Page 34: Abraçando a mudança com Código

API DOS SERVIÇOS

34

API Hoogle: HOOGLE_SUCESSO = 200 HOOGLE_REVOCADO = 403 HOOGLE_BLOQEUADO = 409

usuários não podem ter espaço extra

#dica: “ string “.strip == "string"

Page 35: Abraçando a mudança com Código

35

JUNTA AE!

Page 36: Abraçando a mudança com Código

36

CADE O PATINHO FAIL?

Page 37: Abraçando a mudança com Código

O PADRÃO STRATEGY

37

Page 38: Abraçando a mudança com Código

STRATEGY

Padrão de comportamento, ou seja, distribui responsabilidades

Criar estratégias e fazer com que seja fácil mudá-las

Estratégias seguem uma mesma interface

38

Page 39: Abraçando a mudança com Código

APLICANDO O PADRÃO STRATEGY

39

Login

LoginViaFaceNote

LoginViaZuiterstatus e

mensagem

método?

status e mensagem

dados do usuário

Page 40: Abraçando a mudança com Código

REFATORANDO

40

Page 41: Abraçando a mudança com Código

UMA NOTA SOBRE REFATORAÇÃO

41

Page 42: Abraçando a mudança com Código

42

JUNTA AE!

Page 43: Abraçando a mudança com Código

43

CADE O PATINHO FAIL?

Page 44: Abraçando a mudança com Código

MANEIRAS DE BUSCARe o padrão SimpleFactory

44

Page 45: Abraçando a mudança com Código

COMPRAS SOCIAIS

Várias maneiras de buscar diferentes Buscas flexíveis com valores padrão

Adicionar mais buscas

45

Page 46: Abraçando a mudança com Código

DESIGN E ARQUITETURA

46

Busca

cria critério

ServicoDeBusca

critério

ids dos produtosparametros

Page 47: Abraçando a mudança com Código

EXEMPLO DE PARÂMETROS

47

#exemplo de hash { tipo_de_busca: :categoria, resultados_por_pagina: 10, categoria: :eletronicos, ordenar_por: :relevancia }

Page 48: Abraçando a mudança com Código

TIPOS DE BUSCA

Busca normal: apenas o nome do produto precisa ser especificado, ordem de exibição padrão por "relevância"

Busca por categoria: é necessário especificar categoria, ordem de exibição dos exibição padrão por "mais recente"

A quantidade de produtos exibidos por página é 15 por padrão

48

Page 49: Abraçando a mudança com Código

BUSCA PROMOCIONALExtensão do problema

49

Page 50: Abraçando a mudança com Código

BUSCA PROMOCIONAL

categoria será sempre "em promoção” resultado sempre será ordenado por "mais recente"

50

Page 51: Abraçando a mudança com Código

51

JUNTA AE!

Page 52: Abraçando a mudança com Código

52

CADE O PATINHO FAIL?

Page 53: Abraçando a mudança com Código

O PADRÃO SIMPLE FACTORY

53

Page 54: Abraçando a mudança com Código

SIMPLE FACTORY

Padrão de criação, ou seja, remove responsabilidade de criar

Utiliza objeto especializado para criar novas instâncias

Não confundir com Factory Method e Abstract Factory!

54

Page 55: Abraçando a mudança com Código

APLICANDO O PADRÃO SIMPLE FACTORY

55

Busca

FabricaDeCriterio

Criterio

dados da busca

parametros

novo objeto

Page 56: Abraçando a mudança com Código

REFATORANDO

56

Page 57: Abraçando a mudança com Código

57

JUNTA AE!

Page 58: Abraçando a mudança com Código

58

CADE O PATINHO FAIL?

Page 59: Abraçando a mudança com Código

SISTEMAS LEGADOSe o padrão Adapter

59

Page 60: Abraçando a mudança com Código

INTERFACE COM SISTEMAS LEGADOS

Informações dos clientes via API com XML Um endpoint para email, outro para endereços, outro

para pagamentos e outro para telefone Os dados devem ser apresentados juntos em JSON

60

Page 61: Abraçando a mudança com Código

DESIGN E ARQUITETURA

61

Cliente

@id_universal

Sistema Legado de Clientes

constrói xml

chama serviço

desconstrói xml

preferências do usuário

valida dados

Page 62: Abraçando a mudança com Código

DIMINUINDO DEPENDÊNCIASExtensão do problema

62

Page 63: Abraçando a mudança com Código

BUSCA PROMOCIONAL

Quando o sistema legado sair, não usaremos mais xml Ainda não sabemos exatamente o que será usado

Precisamos separar a lógica de processamento de xml

63

Page 64: Abraçando a mudança com Código

64

JUNTA AE!

Page 65: Abraçando a mudança com Código

65

CADE O PATINHO FAIL?

Page 66: Abraçando a mudança com Código

O PADRÃO ADAPTER

66

Page 67: Abraçando a mudança com Código

ADAPTER

Padrão estrutural, ou seja, facilitam o design do projeto

Define um contrato entre duas interfaces diferentes

Simplifica mudanças nessas interfaces, desde que mantenha-se o mesmo contrato

67

Page 68: Abraçando a mudança com Código

DESIGN E ARQUITETURA

68

Clienteid_universal

Sistema Legado de Clientes

constrói xml

chama serviço

desconstrói xml

preferências do usuário

valida data

Adaptador

Page 69: Abraçando a mudança com Código

REFATORANDO

69

Page 70: Abraçando a mudança com Código

70

JUNTA AE!

Page 71: Abraçando a mudança com Código

71

CADE O PATINHO FAIL?

Page 72: Abraçando a mudança com Código

TRANSFORMANDO O PATINHO FAILComo fazer com que seu código seja aberto a mudanças

72

Page 73: Abraçando a mudança com Código

O PATINHO FAIL ESTÁ EM TODO LUGAR!

73

Page 74: Abraçando a mudança com Código

ABRACE O PATINHO FAIL E CUIDE DELE

74

Page 75: Abraçando a mudança com Código

O PATINHO FAIL É TEMPERAMENTAL

75

Page 76: Abraçando a mudança com Código

MAS O PATINHO FAIL TAMBÉM PODE FICAR FELIZ!

76

Page 77: Abraçando a mudança com Código

<JABÁ>Este workshop foi um oferecimento de…

77

Page 78: Abraçando a mudança com Código

QUER MAIS?

78

Livro pela Casa do Código

Lançamento dia 30 de Outubro

Page 79: Abraçando a mudança com Código

ESTAMOS CONTRATANDO!

79

@marcosbrizeno ou [email protected]

Page 80: Abraçando a mudança com Código

</JABÁ> RETRO TIME!!!Este workshop foi um oferecimento de…

80

Page 81: Abraçando a mudança com Código

NOTA PARA SI MESMO

81

Escreva em um post-it algo para se lembrar

durante a semana

Mantenha essa nota perto de você

www.funretrospectives.com/note-to-self/

Page 82: Abraçando a mudança com Código

RETROSPECTIVA ROI

82http://www.funretrospectives.com/feedback-and-roi/

Page 83: Abraçando a mudança com Código

OBRIGADO!@marcosbrizeno

https://github.com/MarcosX/agilebrazil-workshop