SlideShare uma empresa Scribd logo
1 de 83
Baixar para ler offline
ABRACE A MUDANÇA COM CÓDIGO
@marcosbrizeno
QUEBRANDO O GELO!
2
FORMANDO TRIÂNGULOS
3
http://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ÇA
A 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 LIMPO
PADRÕES DE PROJETO
SOLID
TDD
DOCUMENTADO
TESTÁVEL
EFICIENTE
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 LIVROS
e 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 HOOGLE
Extensã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
LoginViaZuiter
status 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 BUSCAR
e 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 produtos
parametros
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 PROMOCIONAL
Extensã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 LEGADOS
e 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ÊNCIAS
Extensã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
Cliente
id_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 FAIL
Como 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
82
http://www.funretrospectives.com/feedback-and-roi/
OBRIGADO!
@marcosbrizeno
https://github.com/MarcosX/agilebrazil-workshop

Mais conteúdo relacionado

Semelhante a Abraçando a mudança com Código

Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPA
Eduardo Britto
 

Semelhante a Abraçando a mudança com Código (20)

Design de APIs REST
Design de APIs RESTDesign de APIs REST
Design de APIs REST
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
 
Angular js
Angular jsAngular js
Angular js
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Programando extensões para Internet Explorer (Webslices e Aceleradores)
Programando extensões para Internet Explorer (Webslices e Aceleradores)Programando extensões para Internet Explorer (Webslices e Aceleradores)
Programando extensões para Internet Explorer (Webslices e Aceleradores)
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
APIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a pontaAPIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a ponta
 
APIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a pontaAPIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a ponta
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na pratica
 
10 Atributos de uma API de Sucesso
10 Atributos de uma API de Sucesso10 Atributos de uma API de Sucesso
10 Atributos de uma API de Sucesso
 
Api first desenhando e testando sua api like a boss
Api first   desenhando e testando sua api like a bossApi first   desenhando e testando sua api like a boss
Api first desenhando e testando sua api like a boss
 
Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPA
 
Cobrancas online na sua aplicacao com MoIP
Cobrancas online na sua aplicacao com MoIPCobrancas online na sua aplicacao com MoIP
Cobrancas online na sua aplicacao com MoIP
 
CURSOS_LISTA2022-v2.pdf
CURSOS_LISTA2022-v2.pdfCURSOS_LISTA2022-v2.pdf
CURSOS_LISTA2022-v2.pdf
 
ROI no front end - vamos pensar em lucro?
ROI no front end - vamos pensar em lucro?ROI no front end - vamos pensar em lucro?
ROI no front end - vamos pensar em lucro?
 

Mais de Marcos Brizeno

Mais de Marcos Brizeno (18)

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
 
GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação Digital
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviços
 
Aprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaAprenda Elixir em um final de semana
Aprenda Elixir em um final de semana
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bom
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimados
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis Distribuidas
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em Ruby
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos Ganham
 
Dubles de teste
Dubles de testeDubles de teste
Dubles de teste
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls Fortaleza
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação Ruby
 
Arquitetura Ágil
Arquitetura ÁgilArquitetura Ágil
Arquitetura Ágil
 
Clean code
Clean codeClean code
Clean code
 

Último

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Abraçando a mudança com Código