Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Evoluindo Ecossistemas com Consumer Driven Cont...
Search
Marcos Castilho da Costa Matos
June 27, 2013
Programming
7
300
Evoluindo Ecossistemas com Consumer Driven Contracts
Palestra dada no Agile Brazil 2013 em conjunto com Thiago Colucci sobre Consumer Driven Contracts
Marcos Castilho da Costa Matos
June 27, 2013
Tweet
Share
More Decks by Marcos Castilho da Costa Matos
See All by Marcos Castilho da Costa Matos
Micro Problemas!
marcosccm
8
320
Micro Testing Pains
marcosccm
1
160
Immortal Ruby
marcosccm
4
660
Ruby Theater
marcosccm
2
150
Cinema Ruby
marcosccm
5
220
Other Decks in Programming
See All in Programming
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
100
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
4
770
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.2k
「AWS CDK入門」の前日譚/Prequelto-Introduction-To-AWSCDK
tyumugi1113
0
100
歴史から学ぶ「Why PHP?」 PHPを書く理由を改めて理解する / Learning from History: “Why PHP?” Rediscovering the Reasons for Writing PHP
seike460
PRO
0
170
Rails Girls Sapporo 2ndの裏側―準備の日々から見えた、私が得たもの / SAPPORO ENGINEER BASE #11
lemonade_37
2
190
DartASTとその活用
sotaatos
2
150
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
7
9.3k
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
170
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
0
160
Doc Translate - LLMを活用したコードドキュメント自動翻訳VSCode拡張機能
eycjur
0
110
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.3k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Docker and Python
trallard
46
3.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Writing Fast Ruby
sferik
630
62k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How GitHub (no longer) Works
holman
315
140k
Designing Experiences People Love
moore
142
24k
Done Done
chrislema
186
16k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
Evoluindo Ecossistemas com Contratos 1
aos envolvidos... 2
Marcos Matos Thiago Colucci doravante denonimados de OS PALESTRANTES 3
desenvolvedores na ThoughtWorks doravante denonimada de A EMPRESA 4
Imaginem manter uma aplicação de 1 000 000 linhas de
código 5
Ninguém mais faz isso hoje em dia, certo? (eu espero
que seja certo) 6
nós criamos REST SOAP RPCs 7 (blarg!) (meus olhooooos)
Técnicas para separar um sistema em vários componentes 8
doravante denominados Micro Serviços 9
Micro Serviço Uma base de código pequena com uma funcionalidade
bem definida (the Unix Way) 10
nós movemos de... 11
12 grandes aplicações monolíticas
para 13
14 diversos micro serviços
Que podem evoluir independentemente 15
Assim acabamos com a complexidade em nossos sistemas! 16
None
Na verdade o que fazemos é mover esta complexidade 18
Princípio da Conservação de Energia A quantidade total de complexidade
de um sistema computacional permanece constante 19 Complexidade Vários caras espertos
Uma arquitetura de micro serviços levanta diversas perguntas 20
como por exemplo o paradoxo dos contratos 21
Contrato Promessa de como se dá a interação com um
serviço. (Uma API + Boa fé) 22
23 /usuarios/:email um ENDPOINT { nome: “marcos”, idade: 27 }
uma RESPOSTA exemplo de um contrato
24 um serviço expõe sua funcionalidade
25 vários clientes começam a depender do contrato
26 não se sabe como alterações afetam os clientes
Serviços desacoplados se tornam acoplados novamente! 27
pior! este acoplamento é totalmente Oculto! 28
como lidar com isso? 29
Exibição #1 A abordagem do Twitter 30
None
Exibição #2 A abordagem do Facebook 32
None
Bem, digamos que voce não trabalha para estas empresas 34
momento True Story 35
Exibição #3 Revele o oculto 36
Contratos Executáveis! 37
38 um CLIENTE precisa de uma funcionalidade
39 o cliente então escreve uma especificação executável desta funcionalidade
40 o cliente então compartilha a spec com o provedor
o CLIENTE o PROVEDOR a SPEC
41 Ambos discutem a spec até que haja um acordo
o CLIENTE o PROVEDOR o CONTRATO
O cliente escreve seus testes utilizando o contrato o CLIENTE
o PROVEDOR Enquanto o provedor implementa a funcionalidade
43 cliente escreve testes em isolamento o CLIENTE o PROVEDOR
o Contrato TESTES de aceitação
44 contratos são testados contra o provedor o CLIENTE o
PROVEDOR o Contrato TESTES de validação
o PROVEDOR os CLIENTES os CONTRATOS
contratos são uma ferramenta de comunicação 46
são executáveis e devem ser compartilhados 47
garantindo seus contratos, um serviço pode evoluir livremente 48
Sim, isto é um pattern =P Consumer Driven Contracts 49
http://martinfowler.com/articles/consumerDrivenContracts.html
e também temos uma gem =D 50 https://github.com/thoughtworks/contracts
demo time! 51
perguntas? 52
obrigado! 53