SlideShare une entreprise Scribd logo
1  sur  155
Télécharger pour lire hors ligne
@cyriux @tpierrain#MemePasMal
Coder sans peur du changement, avec la
"même pas mal !" architecture
hexagonale
Cyrille MARTRAIRE (@cyriux)
Arolla
!
Thomas PIERRAIN (@tpierrain)
Société Générale
@cyriux @tpierrain#MemePasMal
CODER	
  SANS	
  PEUR	
  DU	
  CHANGEMENT,	
  AVEC	
  LA	
  "MÊME	
  PAS	
  
MAL	
  !"	
  ARCHITECTURE	
  HEXAGONALE
Cyrille MARTRAIRE (@cyriux)
Arolla
!
Thomas PIERRAIN (@tpierrain)
Société Générale
Architecte
Société Générale
Thomas Pierrain
6
7
Passionate developer
PARIS
Since 1999
!
@cyriux
Cyrille Martraire
Paris Software
Craftsmanship Community
http://www.meetup.com/paris-software-craftsmanship/
TDD
BDD
DDD
Legacy
Architecte
Technique
Central
Architecte
Technique
Central
Your own Sweets Box Online!
Use-cases
1. Choose your box
and the sweets
to put inside
2. Get a price
3. Order, & consult
past orders
Let’s start
As usual:

Chose the DB & 

Design the DB schema!
STOP !
Alistair Cockburn
Uncle Bob Martin
Hexagonal
100% Domain Inside
Thin layer of Use-cases
Ports/Adapters all around
Adapter
Dependencies always 

towards the inside!
X
Allowed way for
dependencies
Dependencies always 

towards the inside!
Vers  l’intérieur,  qu’il  
dit  le  monsieur  !
Ports/Adapters?
“REST”Port
“REST”
Adapter
“EMS“
Adapter
“Tibco EMS”
Port
Hexagonal?
Users Vs. Providers
THEY 

NEED
ME
I NEED
THEM
API
(Application
Provider
Interface)
SPI
(Service
Provider
Interface)
Tests Vs. Production
Deliver value to PROD
Verify behavior in TEST
Test Robots Fakes, Mocks
Clients Stores etc.
Scenario-Driven…
Given a sweets box of size XL
And a selection of 500g of M&Ms
And assuming the following prices
| item | price | currency |
| XL Box | 2.50 | EUR |
| M&M (100g)| 5.00 | EUR |
!
When I ask for a price
Then the price is 27.50 EUR
Modeling the domain…
Sweets
CustomSweetsBox
SweetsBoxPricer
AllOrders
Catalog Order
ShippingCostEstimat
or
Caramels
Nougat
Fudge
Modeling the domain…
Sweets
CustomSweetsBox
SweetsBoxPricer
AllOrders
Catalog Order
ShippingCostEstimat
or
Caramels
Nougat
Fudge
Beware of
Modelism!
I need to call
external services,
but I don’t want
to know about
them
DIP principle
X
DIP principle
Interface
Adapter
interface
interface
REPOSITORY
interface
Start with mocks
MOCK
Add an html web app…
“REST”
Adapter
We can demo!
Quick Win 1

Focus on
what really
matters
Implement the repository
Implement the repository
On the
cloudz!
Implement actual persistence
interface
Amazon
Adaptor
Même pas mal !

(“that didn't hurt one bit“)
Quick Win 2

Choose the
technology last
(when we know best)
47
MAX
IGNORANCE
48
Who’s  that  architect  
who  can’t  decide  the  
technologies  early?
Ebay as additional retailer?
Ebay as additional retailer!
“REST”
Adapter
Ebay
Adapter
Même pas …
New shipping provider?
interface
FEDEX
Adaptor
New shipping provider?!
Again:

Même pas
mal !!!
Quick Win 3

Embrace the
changes
X
Allowed way for
dependencies
Hexagonal architecture
Quick Win 4

Low coupling

High cohesion
Before 

(legacy architecture)
After

(Hexagonal Architecture)
Quick Win 5

Our business code is
not victim of IT fads
anymore!
61
Hexagonal Architecture
Use & Abuse!
Need other areas of behaviors?
• Business intelligence?
• Supply Chain management
• CRM?
• …
Même pas ! 

;-)
Hexagonal all the things
New Bounded Contexts?
New Micro-services?
Main benefits
!
1.Focus on what really matters

(business value first!) ➔ have you ever tried DDD?
!
2.Choose the technology last 

(when we know best our concrete needs)
!
3.Embrace the changes 

(“Même pas mal !” / “that didn't hurt one bit“)
Thanks!
Cyrille MARTRAIRE @cyriux
Thomas PIERRAIN @tpierrain
@cyriux @tpierrain#MemePasMal
CODER	
  SANS	
  PEUR	
  DU	
  CHANGEMENT,	
  AVEC	
  LA	
  "MÊME	
  PAS	
  
MAL	
  !"	
  ARCHITECTURE	
  HEXAGONALE
Cyrille MARTRAIRE (@cyriux)
Arolla
!
Thomas PIERRAIN (@tpierrain)
Société Générale
70
FUZZY
FUZZY
FUZZY
Pattern
Port
Vs
Adapter?
Port = Existing Techno
Adapter = Your code
You disagree?
Not that important.
Symmetries?
80
Not that important.
Inside
vs.
Outside
Who’s talking about
hexagonal?
Alistair Cockburn
84
”Uncle Bob” Martin
85
Steeve Freeman & Nat Pryce (GOOS)
86
Vaughn Vernon (IDDD)
87
Jeffrey Palermo (Onion Architecture)
88
h;p://pragprog.com/magazines/2009-­‐12/going-­‐naked
Depends  on  
nothing
Pragmatic Programmers
Many notations!
Still, not well-known
+--------------+!
| presentation |!
|--------------|!
| domain |!
|--------------|!
| persistence |!
+--------------+
Layers?
+-----+-------------+----------+!
| gui | file system | database |!
|-----+-------------+----------+!
| domain |!
|------------------------------+
Infra the other way round!
Layering
http://matteo.vaccari.name/blog/archives/154
Inside
vs.
Outside
Un Dedans
et
Un Dehors
Un Dedans
et
Un Dehors
#des reperes pour nos enfants
For real
98
99
Ted Neward
We’re launching a
startup, man.
Sentiment Analysis
!
Automatically extract the sentiment of
English sentences submitted on the web,
using a given lexicon. Keep track of the
submitted sentences.
Your Turn
!
5mn
Small groups
Any technology / approach
Propose an architecture on paper
!
Then we’ll debrief a selection of them
Sentiment Analysis
!
Automatically extract the sentiment of
English sentences submitted on the web,
using a given lexicon. Keep track of the
submitted sentences.
105
How to enforce?
108
http://books.sonatype.com/mvnref-book/reference/flex-dev-sect-creating-with-archetype.html
Maven
multi-
module
109
http://clarkware.com/software/JDepend.html
JDepend
110https://leanpub.com/livingdocumentation/
111
Living Diagrams
4  novel  coupling  metrics  
1. Undesirable  Dependency  Count  
2. Undesirable  Distinct  Dependency  Count  
3. Undesirable  Dependency  Max  Repetition  
4. Undesirable  Distinct  Assembly  Count	
  
!
  
Bad
Good
● Provoke conversations
Conformist
vs.
Hexagonal
Conformist (accidental)
Hexagonal Architecture
Hexadecimal
Architecture:
Need at least
16 layers in the code
Architecture = ?
Architecture
!
”The key technology choices”
BOF…
Architecture
!
”What everybody should know”
Architecture
!
”What’s hard to change”
Architecture
!
”What’s irreversible”
Reversible decisions FTW!
Defer
technology
decisions
Change your
mind easily
50% TECH
50% COMM
50% TECH
50% COMM
(10% MATHS)
Communication FTW!
AGREE
ON
MAXIMS
”Le principe du nombril :
on regarde vers l’intérieur”
Repository
Persistence Ignorance
!
!
•You	
  can	
  defer	
  decisions	
  about	
  
persistence	
  (and	
  UI)	
  for	
  a	
  long	
  ^me	
  
•Your	
  domain	
  must  NOT  care!
Un	
  service,	
  la	
  facade	
  coté	
  
mé^er	
  d’un	
  stockage	
  
!
Sans	
  jamais	
  parler	
  de	
  base	
  
de	
  données.
Repository
h;p://www.andeka.co.cc/2011/07/postbox-­‐251.html
Repository
h;p://www.andeka.co.cc/2011/07/postbox-­‐251.html
Interface
DAO
Repository
In Legacy
Bubble Context
• Create a little bubble of
innovation
!
• Brand new model
!
• As clean as we like
• Highly tested
• High hygiene standards
Bubble Context
• ACL to protect from the
legacy code
!
• Translates legacy
objects & services into
new, cleaner ones
Anti-corruption
layer
Module (lib)
<<ValueObject<<ValueObject
<<ValueObject>>
<<ValueObject
<<ValueObject>>
<<Service>>	
  
<<SPI>>
<<Service>>	
  
<<API>>
<<En7ty>>	
  
<<Aggregate>>
Module  
==  
library
Accès  aux  
services  
extérieurs
Module  ==  
library
Accès  aux  
services  
extérieurs
Hexagonal Architecture
Scenario  test  
data
Adapters
Bounded Contexts
Bounded Contexts
Il	
  n’est	
  pas	
  possible	
  de	
  convenir	
  du	
  sens	
  précis	
  des	
  
mots	
  u7lisés	
  par	
  un	
  grand	
  nombre	
  de	
  personnes.	
  
!
Il	
  faut	
  accepter	
  ce	
  fait,	
  et	
  donc	
  définir  dans  quel  
contexte	
  un	
  langage	
  est	
  clairement	
  défini	
  sans	
  
ambiguité.
Different
MY activity is not the
Merci !
hFp://cathy313.centerblog.net/539-­‐bisounours
Wrap-up
• Concepts & Messages
– Subir -> Délibéré	
  
– Intérieur Vs Extérieur	
  
– Gérer ses dépendances	
  
– Langage interne / externe	
  
– DIP	
  
• Exemples
• Kata
Content
• When not to go Hexagonal?	
  
– Conformist
– Facebook game
– Too small (connector…)	
  
!
• Advanced aspects	
  
– The adapter pattern	
  
– Tech ports diversity
– 1 Adapter – many interfaces	
  
– 1 interface – many adapters
– Data push	
  
– Session management	
  
– Adapter as a module indeed
Content 2
Domain model as a Pure
Functions (100% no Entity
inside) vs as Aggregates
!
--
The Repository pattern
Reuse slides
Hexagonal for a Bubble
Context within a legacy
!
Ports = surrounding legacy
Adapters = repository /
adapter
!
Cloakroom / clandestine
passenger patterns
Content 3
How to enforce?
!
Discipline
Maven multi modules, .Net projects
Static analysis: JDepend rules, NDepend,
Sonar plugins
—
Bounded Context
Reuse slides
!
Conformist vs ACL isolation
Same language or not?
!
Autonomous Components / Polyglot
persistence
!
Influence of sync vs async / push vs pull on
the inside of the hexagon
!
Examples?
Living Documentation
Convention (YES)? Annotation on
packages?
!
The Bounded Contexts / the
Domain models vs the rest (ici un
seul Bounded Context)
!
Domain model -> inside
Everything else
- that implements something from
the domain model -> at the right
- everything else that only calls -
> at the left
!
Apply DDD!
153
http://www.lexicalscope.com/blog/category/patterns/
http://matteo.vaccari.name/blog/archives/154
Problem:  write  a  program  that  
1.	
  Loads	
  a	
  set	
  of	
  employee	
  records	
  from	
  a	
  flat	
  file	
  	
  
2.	
  Sends	
  a	
  greetings	
  email	
  to	
  all	
  employees	
  whose	
  birthday	
  is	
  today	
  	
  
!
The	
  flat	
  file	
  is	
  a	
  sequence	
  of	
  records,	
  separated	
  by	
  newlines;	
  this	
  are	
  the	
  first	
  few	
  lines:	
  
last_name, first_name, date_of_birth, email !
Doe, John, 1982/10/08, john.doe@foobar.com !
Ann, Mary, 1975/09/11, mary.ann@foobar.com !
The	
  greetings	
  email	
  contains	
  the	
  following	
  text:	
  
Subject:	
  Happy	
  birthday!	
  Happy	
  birthday,	
  dear	
  John!	
  	
  
with	
  the	
  first	
  name	
  of	
  the	
  employee	
  substituted	
  for	
  “John”	
  
!
3.	
  REST	
  service	
  to	
  query	
  past	
  greetings	
  
!
HINT:	
  today	
  is	
  a	
  tech	
  port!	
  
!
!
+-----+-------------+----------+!
| gui | file system | database |!
|-----+-------------+----------+!
| domain |!
|------------------------------+
+--------------+!
| presentation |!
|--------------|!
| domain |!
|--------------|!
| persistence |!
+--------------+
Exercise
Postgres Sql + Gui (+ myBatis ?)
Audit et log dans le domain
+ Metrics

Contenu connexe

Tendances

Tendances (20)

KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
 
CQRS and event sourcing
CQRS and event sourcingCQRS and event sourcing
CQRS and event sourcing
 
Clova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBootClova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBoot
 
From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytv
 
Becoming a better developer by using the SOLID design principles
Becoming a better developer by using the SOLID design principlesBecoming a better developer by using the SOLID design principles
Becoming a better developer by using the SOLID design principles
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
The Art of Discovering Bounded Contexts
The Art of Discovering Bounded ContextsThe Art of Discovering Bounded Contexts
The Art of Discovering Bounded Contexts
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
Scrum + bdd + ddd
Scrum + bdd + dddScrum + bdd + ddd
Scrum + bdd + ddd
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
Solid principles
Solid principlesSolid principles
Solid principles
 
Maven基礎
Maven基礎Maven基礎
Maven基礎
 
Tech talks#6: Code Refactoring
Tech talks#6: Code RefactoringTech talks#6: Code Refactoring
Tech talks#6: Code Refactoring
 
Specification-By-Example with Gherkin
Specification-By-Example with GherkinSpecification-By-Example with Gherkin
Specification-By-Example with Gherkin
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기
 
DDD In Agile
DDD In Agile   DDD In Agile
DDD In Agile
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
Writing Spring WebFlux more esay with kotlin
Writing Spring WebFlux more esay with kotlinWriting Spring WebFlux more esay with kotlin
Writing Spring WebFlux more esay with kotlin
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 

En vedette

En vedette (20)

Faible latence haut debit Devoxx FR 2014
Faible latence haut debit Devoxx FR 2014Faible latence haut debit Devoxx FR 2014
Faible latence haut debit Devoxx FR 2014
 
Sortir de notre zone de confort
Sortir de notre zone de confortSortir de notre zone de confort
Sortir de notre zone de confort
 
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20....Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
 
Docker and Windows: The State of the Union
Docker and Windows: The State of the UnionDocker and Windows: The State of the Union
Docker and Windows: The State of the Union
 
Decouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event stormingDecouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event storming
 
Decouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratiqueDecouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratique
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
 
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with SagasQCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
 
.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless
 
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with DockerThe Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
 
Windows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should CareWindows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should Care
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
Faible latence, haut debit PerfUG (Septembre 2014)
Faible latence, haut debit PerfUG (Septembre 2014)Faible latence, haut debit PerfUG (Septembre 2014)
Faible latence, haut debit PerfUG (Septembre 2014)
 
Async await...oh wait!
Async await...oh wait!Async await...oh wait!
Async await...oh wait!
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
 
TDD is dead?!? Let's do an autospy (ncrafts.io)
TDD is dead?!? Let's do an autospy (ncrafts.io)TDD is dead?!? Let's do an autospy (ncrafts.io)
TDD is dead?!? Let's do an autospy (ncrafts.io)
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...
 
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
 
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
 

Similaire à Coder sans peur du changement avec la meme pas mal hexagonal architecture

Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
Dmytro Mindra
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
Mike Harris
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
Mike Harris
 

Similaire à Coder sans peur du changement avec la meme pas mal hexagonal architecture (20)

Old code doesn't stink - Detroit
Old code doesn't stink - DetroitOld code doesn't stink - Detroit
Old code doesn't stink - Detroit
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
 
Trunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and EconomicsTrunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and Economics
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
 
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps JargonYour Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
 
Software Engineering in Startups
Software Engineering in StartupsSoftware Engineering in Startups
Software Engineering in Startups
 
Mini-course "Practices of the Web Giants" at Global Code - São Paulo
Mini-course "Practices of the Web Giants" at Global Code - São PauloMini-course "Practices of the Web Giants" at Global Code - São Paulo
Mini-course "Practices of the Web Giants" at Global Code - São Paulo
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Design for Scale / Surge 2010
Design for Scale / Surge 2010Design for Scale / Surge 2010
Design for Scale / Surge 2010
 
How to write good quality code
How to write good quality codeHow to write good quality code
How to write good quality code
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft Forever
 
Facilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleFacilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at Scale
 
Guide to Destroying Codebases The Demise of Clever Code
Guide to Destroying Codebases   The Demise of Clever CodeGuide to Destroying Codebases   The Demise of Clever Code
Guide to Destroying Codebases The Demise of Clever Code
 
Developer Efficiency
Developer EfficiencyDeveloper Efficiency
Developer Efficiency
 
Peyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futurePeyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_future
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
201811xx foredrag c_cpp
201811xx foredrag c_cpp201811xx foredrag c_cpp
201811xx foredrag c_cpp
 

Plus de Thomas Pierrain

Plus de Thomas Pierrain (17)

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
 
Hexagonal And Beyond
Hexagonal And BeyondHexagonal And Beyond
Hexagonal And Beyond
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
 
eXtreme
eXtremeeXtreme
eXtreme
 
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
 
Culture Craft Devoxx 2015
Culture Craft Devoxx 2015Culture Craft Devoxx 2015
Culture Craft Devoxx 2015
 

Dernier

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Dernier (20)

WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 

Coder sans peur du changement avec la meme pas mal hexagonal architecture