155
@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

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

Embed Size (px)

Citation preview

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

@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

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

@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

Page 3: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 4: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 5: Coder sans peur du changement avec la meme pas mal hexagonal architecture

Architecte

Société Générale

Thomas Pierrain

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

6

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

7

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

Passionate developer

PARIS Since 1999

!

@cyriux

Cyrille Martraire

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

Paris Software Craftsmanship Community

http://www.meetup.com/paris-software-craftsmanship/

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

TDDBDDDDDLegacy

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

Architecte Technique

Central

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

Architecte Technique

Central

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

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

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

Let’s start

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

As usual: Chose the DB &

Design the DB schema!

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

STOP !

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

Alistair Cockburn

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

Uncle Bob Martin

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

Hexagonal

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

100% Domain Inside

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

Thin layer of Use-cases

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

Ports/Adapters all around

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

Adapter

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

Dependencies always towards the inside!

X

Allowed way for dependencies

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

Dependencies always towards the inside!

Vers  l’intérieur,  qu’il  

dit  le  monsieur  !

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

Ports/Adapters?“REST” Port

“REST” Adapter

“EMS“ Adapter

“Tibco EMS”

Port

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

Hexagonal?

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

Users Vs. Providers

THEY NEED ME

I NEED THEM

API (Application Provider Interface)

SPI (Service Provider Interface)

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

Tests Vs. Production

Deliver value to PROD

Verify behavior in TESTTest Robots Fakes, Mocks

Clients Stores etc.

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

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

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

Modeling the domain…

Sweets

CustomSweetsBox

SweetsBoxPricerAllOrders

Catalog Order

ShippingCostEstimator

Caramels

Nougat

Fudge

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

Modeling the domain…

Sweets

CustomSweetsBox

SweetsBoxPricerAllOrders

Catalog Order

ShippingCostEstimator

Caramels

Nougat

Fudge

Beware of

Modelism!

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

I need to call external services, but I don’t want to know about

them

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

DIP principle

X

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

DIP principle

Interface

Adapter

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

interface

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

interface

REPOSITORY

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

interface

Start with mocks

MOCK

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

Add an html web app…

“REST” Adapter

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

We can demo!

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

Quick Win 1

Focus on what really

matters

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

Implement the repository

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

Implement the repository

On the

cloudz!

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

Implement actual persistence

interface

Amazon

Adaptor

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

Même pas mal !(“that didn't hurt one bit“)

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

Quick Win 2

Choose the technology last

(when we know best)

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

47

MAX IGNORANCE

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

48

Who’s  that  architect  who  can’t  decide  the  technologies  early?

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

Ebay as additional retailer?

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

Ebay as additional retailer!

“REST” Adapter

Ebay Adapter

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

Même pas …

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

New shipping provider?

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

interface

FEDEX

Adaptor

New shipping provider?!

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

Again:

Même pas mal !!!

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

Quick Win 3

Embrace the changes

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

X

Allowed way for dependencies

Hexagonal architecture

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

Quick Win 4

Low couplingHigh cohesion

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

Before (legacy architecture)

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

After (Hexagonal Architecture)

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

Quick Win 5Our business code is not victim of IT fads

anymore!

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

61

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

Hexagonal Architecture

Use & Abuse!

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

Need other areas of behaviors?

• Business intelligence? • Supply Chain management • CRM? • …

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

Même pas ! ;-)

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

Hexagonal all the things

New Bounded Contexts? New Micro-services?

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

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“)

Page 67: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 68: Coder sans peur du changement avec la meme pas mal hexagonal architecture

Thanks!Cyrille MARTRAIRE @cyriux

Thomas PIERRAIN @tpierrain

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

@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

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

70

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

FUZZY

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

FUZZY

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

FUZZY

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

Pattern

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

Port Vs

Adapter?

Page 76: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 77: Coder sans peur du changement avec la meme pas mal hexagonal architecture

Port = Existing Techno Adapter = Your code

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

You disagree?

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

Not that important.

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

Symmetries?

80

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

Not that important.

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

Inside vs.

Outside

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

Who’s talking about hexagonal?

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

Alistair Cockburn

84

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

”Uncle Bob” Martin

85

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

Steeve Freeman & Nat Pryce (GOOS)

86

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

Vaughn Vernon (IDDD)

87

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

Jeffrey Palermo (Onion Architecture)

88

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

h;p://pragprog.com/magazines/2009-­‐12/going-­‐naked

Depends  on  nothing

Pragmatic Programmers

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

Many notations!

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

Still, not well-known

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

+--------------+!| presentation |!|--------------|!| domain |!|--------------|!| persistence |!+--------------+

Layers?

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

+-----+-------------+----------+!| gui | file system | database |!|-----+-------------+----------+!| domain |!|------------------------------+

Infra the other way round!

Layering

http://matteo.vaccari.name/blog/archives/154

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

Inside vs.

Outside

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

Un Dedans et

Un Dehors

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

Un Dedans et

Un Dehors#des reperes pour nos enfants

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

For real

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

98

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

99

Ted Neward

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

We’re launching a startup, man.

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

Sentiment Analysis !

Automatically extract the sentiment of English sentences submitted on the web, using a given lexicon. Keep track of the

submitted sentences.

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

Your Turn !

5mn Small groups

Any technology / approach

Propose an architecture on paper !

Then we’ll debrief a selection of them

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

Sentiment Analysis !

Automatically extract the sentiment of English sentences submitted on the web, using a given lexicon. Keep track of the

submitted sentences.

Page 104: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 105: Coder sans peur du changement avec la meme pas mal hexagonal architecture

105

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

How to enforce?

Page 107: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 108: Coder sans peur du changement avec la meme pas mal hexagonal architecture

108http://books.sonatype.com/mvnref-book/reference/flex-dev-sect-creating-with-archetype.html

Maven multi-

module

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

109

http://clarkware.com/software/JDepend.html

JDepend

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

110https://leanpub.com/livingdocumentation/

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

111

Living Diagrams

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

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

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

Conformist vs.

Hexagonal

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

Conformist (accidental)

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

Hexagonal Architecture

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

Hexadecimal Architecture:

Need at least 16 layers in the code

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

Architecture = ?

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

Architecture !

”The key technology choices”BOF…

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

Architecture !

”What everybody should know”

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

Architecture !

”What’s hard to change”

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

Architecture !

”What’s irreversible”

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

Reversible decisions FTW!

Defer technology decisions

Change your

mind easily

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

50% TECH 50% COMM

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

50% TECH 50% COMM (10% MATHS)

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

Communication FTW!

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

AGRE

E

ON

MAXIM

S

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

”Le principe du nombril : on regarde vers l’intérieur”

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

Repository

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

Persistence Ignorance

!

!

•You  can  defer  decisions  about  persistence  (and  UI)  for  a  long  ^me  •Your  domain  must  NOT  care!

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

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

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

Repository

h;p://www.andeka.co.cc/2011/07/postbox-­‐251.html

Interface

DAO

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

Repository

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

In Legacy

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

Bubble Context

• Create a little bubble of innovation !

• Brand new model !

• As clean as we like • Highly tested • High hygiene standards

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

Bubble Context

• ACL to protect from the legacy code !

• Translates legacy objects & services into new, cleaner ones

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

Anti-corruption layer

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

Module (lib)

<<ValueObject<<ValueObject<<ValueObject>> <<ValueObject

<<ValueObject>>

<<Service>>  <<SPI>>

<<Service>>  <<API>>

<<En7ty>>  <<Aggregate>>

Module  ==  

library

Accès  aux  services  extérieurs

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

Module  ==  library

Accès  aux  services  extérieurs

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

Hexagonal Architecture

Scenario  test  data

Adapters

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

Bounded Contexts

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

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é.

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

Different

MY activity is not the same as YOUR event

Page 143: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 144: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 145: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 146: Coder sans peur du changement avec la meme pas mal hexagonal architecture

Merci !

hFp://cathy313.centerblog.net/539-­‐bisounours

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

Wrap-up

• Concepts & Messages – Subir -> Délibéré  – Intérieur Vs Extérieur  – Gérer ses dépendances  – Langage interne / externe  – DIP  • Exemples • Kata

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

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

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

Content 2Domain 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

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

Content 3How 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 !

Page 151: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 152: Coder sans peur du changement avec la meme pas mal hexagonal architecture
Page 153: Coder sans peur du changement avec la meme pas mal hexagonal architecture

Apply DDD!

153

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

http://www.lexicalscope.com/blog/category/patterns/

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

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, [email protected] !Ann, Mary, 1975/09/11, [email protected] !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