Abraçando a mudança com Código

Preview:

Citation preview

ABRACE A MUDANÇA COM CÓDIGO

@marcosbrizeno

QUEBRANDO O GELO!

2

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

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

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

5

A PROFECIA AUTORREALIZÁVEL

O seu projeto vai mudar!

6

A PROFECIA AUTORREALIZÁVEL

7

“Be water my friend.” - Bruce Lee

A PROFECIA AUTORREALIZÁVEL

8

DESENVOLVIMENTO ÁGIL

Fortemente baseado em pessoas e colaboração

9

DESENVOLVIMENTO ÁGIL

Ciclo de feedback reduzido

10

DESENVOLVIMENTO ÁGIL

Envolvimento com o cliente e usuários o tempo todo

11

DESENVOLVIMENTO ÁGIL

Exploração e aprendizado

12

CÓDIGO ÁGIL?

13

“Talk is cheap. Show me the code.”

- Linus Torvalds

CÓDIGO ÁGIL?

14

CÓDIGO ÁGIL?

Código no centro de tudo

15

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

CÓDIGO ÁGIL?

17

O REI ESTÁ NÚ!

18

SCRUM NÃO RESOLVE O SEU

PROBLEMA

O REI ESTÁ NÚ!

19

Waterfall: Vamos entregar o projeto próximo ano!

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

O REI ESTÁ NÚ!

20

Um ano depois

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!

O REI ESTÁ NÚ!

22

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

O REI ESTÁ NÚ!

23

SCRUM SOZINHO NÃO RESOLVE O SEU

PROBLEMA

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

24

PATINHO FAIL

25

EU S2 LIVROSe o padrão Strategy

26

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

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

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

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

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

EXEMPLO DE PARÂMETRO

32

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

LOGIN VIA HOOGLEExtensão do problema

33

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"

35

JUNTA AE!

36

CADE O PATINHO FAIL?

O PADRÃO STRATEGY

37

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

APLICANDO O PADRÃO STRATEGY

39

Login

LoginViaFaceNote

LoginViaZuiterstatus e

mensagem

método?

status e mensagem

dados do usuário

REFATORANDO

40

UMA NOTA SOBRE REFATORAÇÃO

41

42

JUNTA AE!

43

CADE O PATINHO FAIL?

MANEIRAS DE BUSCARe o padrão SimpleFactory

44

COMPRAS SOCIAIS

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

Adicionar mais buscas

45

DESIGN E ARQUITETURA

46

Busca

cria critério

ServicoDeBusca

critério

ids dos produtosparametros

EXEMPLO DE PARÂMETROS

47

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

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

BUSCA PROMOCIONALExtensão do problema

49

BUSCA PROMOCIONAL

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

50

51

JUNTA AE!

52

CADE O PATINHO FAIL?

O PADRÃO SIMPLE FACTORY

53

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

APLICANDO O PADRÃO SIMPLE FACTORY

55

Busca

FabricaDeCriterio

Criterio

dados da busca

parametros

novo objeto

REFATORANDO

56

57

JUNTA AE!

58

CADE O PATINHO FAIL?

SISTEMAS LEGADOSe o padrão Adapter

59

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

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

DIMINUINDO DEPENDÊNCIASExtensão do problema

62

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

64

JUNTA AE!

65

CADE O PATINHO FAIL?

O PADRÃO ADAPTER

66

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

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

REFATORANDO

69

70

JUNTA AE!

71

CADE O PATINHO FAIL?

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

72

O PATINHO FAIL ESTÁ EM TODO LUGAR!

73

ABRACE O PATINHO FAIL E CUIDE DELE

74

O PATINHO FAIL É TEMPERAMENTAL

75

MAS O PATINHO FAIL TAMBÉM PODE FICAR FELIZ!

76

<JABÁ>Este workshop foi um oferecimento de…

77

QUER MAIS?

78

Livro pela Casa do Código

Lançamento dia 30 de Outubro

ESTAMOS CONTRATANDO!

79

@marcosbrizeno ou mbrizeno@thoughtworks.com

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

80

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/

RETROSPECTIVA ROI

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

OBRIGADO!@marcosbrizeno

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

Recommended