harnessing domain driven design

79
Harnessing Domain Driven Design Gayathri Thiyagarajan Lead Software Engineer Capgemini Andrew Harmel Law Principal Software Engineer Capgemini

Upload: capgemini

Post on 15-Feb-2017

907 views

Category:

Presentations & Public Speaking


4 download

TRANSCRIPT

Page 1: Harnessing Domain Driven Design

Harnessing Domain Driven DesignGayathri ThiyagarajanLead Software Engineer Capgemini

Andrew Harmel Law Principal Software Engineer Capgemini

Page 2: Harnessing Domain Driven Design

@YourTwitterHandle#YourSessionHashtag

Harnessing Domain Driven Design for Distributed Systems

Gayathri Thiyagarajan & Andrew Harmel-Law,

Capgemini UK http://capgemini.github.io

@gaythu_rajan / @al94781#harnessing_ddd

Page 3: Harnessing Domain Driven Design

cc: kennymatic - https://www.flickr.com/photos/99472898@N00@gaythu_rajan / @al94781#harnessing_ddd

Who are we?

Page 4: Harnessing Domain Driven Design

Who are we?

@gaythu_rajan / @al94781#harnessing_ddd

Page 5: Harnessing Domain Driven Design

“Microservice”?

@gaythu_rajan / @al94781#harnessing_ddd

Page 6: Harnessing Domain Driven Design

“Microservice”? (cont.)

@gaythu_rajan / @al94781#harnessing_ddd

Page 7: Harnessing Domain Driven Design

“Microservice”? (cont.)

@gaythu_rajan / @al94781#harnessing_ddd

Page 8: Harnessing Domain Driven Design

“Microservice”? (cont.)

@gaythu_rajan / @al94781#harnessing_ddd

Page 9: Harnessing Domain Driven Design

“Microservice”? (cont.)

@gaythu_rajan / @al94781#harnessing_ddd

Page 10: Harnessing Domain Driven Design

“Microservice”? (cont.)

@gaythu_rajan / @al94781#harnessing_ddd

Page 11: Harnessing Domain Driven Design

Microservices ROCK!

cc: RaeAllen - https://www.flickr.com/photos/30628871@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 12: Harnessing Domain Driven Design

Microservices are HARD

@gaythu_rajan / @al94781#harnessing_ddd

Page 13: Harnessing Domain Driven Design

“Getting service boundaries wrong can result in having to make lots of changes in service-service collaboration. An expensive operation.”

from Sam Newman, “Building Microservices” (section: When shouldn’t you use Microservices)

Boundaries are HARDEST

@gaythu_rajan / @al94781#harnessing_ddd

Page 14: Harnessing Domain Driven Design

Microservices LOVE DDD

cc: {AndreaRenee} - https://www.flickr.com/photos/30282864@N02

“Despite the hype [microservices] probably giv[e] us the best environment we have ever had for doing Domain-Driven Design”

(Interview with Eric Evans at 2015 DDD Exchange)@gaythu_rajan / @al94781#harnessing_ddd

Page 15: Harnessing Domain Driven Design

cc: taberandrew - https://www.flickr.com/photos/88442983@N00

@gaythu_rajan / @al94781#harnessing_ddd

Unfortunately...

Page 16: Harnessing Domain Driven Design

Some steps...

@gaythu_rajan / @al94781#harnessing_ddd

cc: marsupium photography - https://www.flickr.com/photos/43405950@N07

Page 17: Harnessing Domain Driven Design

The CoreHow DDD helps our CODE

cc: Laurence Vagner - https://www.flickr.com/photos/86078191@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 18: Harnessing Domain Driven Design

Ubiquitous Language

cc: mag3737 - https://www.flickr.com/photos/50318388@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 19: Harnessing Domain Driven Design

Hands-On Modellers

cc: jovike - https://www.flickr.com/photos/49503078599@N01

@gaythu_rajan / @al94781#harnessing_ddd

Page 20: Harnessing Domain Driven Design

The MisappliedHow DDD helps our overall Architecture

cc: juhansonin - https://www.flickr.com/photos/38869431@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 21: Harnessing Domain Driven Design

The Important Bits

• Models• Aggregates• Contexts• Bounded Contexts• Context Maps

@gaythu_rajan / @al94781#harnessing_ddd

Page 22: Harnessing Domain Driven Design

Shared Payment ServicesOur Case Study:

cc: Khánh Hmoong - https://www.flickr.com/photos/7997148@N05

@gaythu_rajan / @al94781#harnessing_ddd

Andrew Harmel-Law
One thing I thought, we need to draw out on this slide that we've built a whig which other sites can use - its a complete set of payment services (screens, processing, and gateway) that others can plumb into)
Page 23: Harnessing Domain Driven Design

Shared Payment Services

@gaythu_rajan / @al94781#harnessing_ddd

Page 24: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Shared Payment Services

Page 25: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Shared Payment Services

Page 26: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Shared Payment Services

Page 27: Harnessing Domain Driven Design

Models

cc: Rob Swatski - https://www.flickr.com/photos/50946274@N02

@gaythu_rajan / @al94781#harnessing_ddd

Page 28: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 29: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 30: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 31: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 32: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 33: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 34: Harnessing Domain Driven Design

Aggregates

cc: J-W Brown - https://www.flickr.com/photos/13797487@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 35: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 36: Harnessing Domain Driven Design

Contexts

cc: petitshoo - https://www.flickr.com/photos/29426084@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 37: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 38: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 39: Harnessing Domain Driven Design

Bounded Contexts

cc: bryce_edwards - https://www.flickr.com/photos/98185064@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 40: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 41: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 42: Harnessing Domain Driven Design

Context Maps

cc: roger4336 - https://www.flickr.com/photos/24736216@N07

@gaythu_rajan / @al94781#harnessing_ddd

Page 43: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 44: Harnessing Domain Driven Design

Why Aggregates?

@gaythu_rajan / @al94781#harnessing_ddd

Page 45: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Aggregate == Microservice

Page 46: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Aggregate == Microservice

Page 47: Harnessing Domain Driven Design

But, Aggregate != Microservice (not always)

@gaythu_rajan / @al94781#harnessing_ddd

Page 48: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

But, Aggregate != Microservice (not always)

Page 49: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 50: Harnessing Domain Driven Design

1. Draw a Model and begin to implement it

cc: Muffet - https://www.flickr.com/photos/53133240@N00

An Approach

@gaythu_rajan / @al94781#harnessing_ddd

Page 51: Harnessing Domain Driven Design

1. Draw a Model and begin to implement it2. As you draw it and code it, listen to the Language and

cultivate your Model accordingly

cc: Muffet - https://www.flickr.com/photos/53133240@N00

An Approach

@gaythu_rajan / @al94781#harnessing_ddd

Page 52: Harnessing Domain Driven Design

1. Draw a Model and begin to implement it2. As you draw it and code it, listen to the Language and

cultivate your Model accordingly3. Identify your Aggregates - these are your starter

Microservices

cc: Muffet - https://www.flickr.com/photos/53133240@N00

An Approach

@gaythu_rajan / @al94781#harnessing_ddd

Page 53: Harnessing Domain Driven Design

cc: Muffet - https://www.flickr.com/photos/53133240@N00

An Approach

@gaythu_rajan / @al94781#harnessing_ddd

1. Draw a Model and begin to implement it2. As you draw it and code it, listen to the Language and

cultivate your Model accordingly3. Identify your Aggregates - these are your starter

Microservices4. When you hit pain points (indicated by the Language) split

into different Bounded Contexts to resolve

Page 54: Harnessing Domain Driven Design

1. Draw a Model and begin to implement it2. As you draw it and code it, listen to the Language and

cultivate your Model accordingly3. Identify your Aggregates - these are your starter

Microservices4. When you hit pain points (indicated by the Language) split

into different Bounded Contexts to resolve5. Revisit your Bounded Contexts now you know more about

how each Aggregate - you may end up splitting themcc: Muffet - https://www.flickr.com/photos/53133240@N00

An Approach

@gaythu_rajan / @al94781#harnessing_ddd

Page 55: Harnessing Domain Driven Design

Done?

cc: WarzauWynn - https://www.flickr.com/photos/94246031@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 56: Harnessing Domain Driven Design

The IgnoredHow DDD helps our Teams Organise

cc: aha42 | tehaha - https://www.flickr.com/photos/31549162@N05

@gaythu_rajan / @al94781#harnessing_ddd

Page 57: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Customer-Supplier

Partnership Anti-Corruption Layer

Upstream

Downstream

Page 58: Harnessing Domain Driven Design

Shared Kernel

SeparateWays

Anti-Corruption

Layer

Partner-ship

Conform-ist

OpenHost

Service

Customer/

Supplier

Cont

rol O

ver A

ssoc

iate

d Te

ams

Communications Commitment / Capability of Teams

@gaythu_rajan / @al94781#harnessing_ddd

Page 59: Harnessing Domain Driven Design

Shared Kernel

SeparateWays

Anti-Corruption

Layer

Partner-ship

Conform-ist

OpenHost

Service

Customer/

Supplier

Cont

rol O

ver A

ssoc

iate

d Te

ams

Communications Commitment / Capability of Teams

@gaythu_rajan / @al94781#harnessing_ddd

Page 60: Harnessing Domain Driven Design

Shared Kernel

SeparateWays

Anti-Corruption

Layer

Partner-ship

Conform-ist

OpenHost

Service

Customer/

Supplier

Cont

rol O

ver A

ssoc

iate

d Te

ams

Communications Commitment / Capability of Teams

@gaythu_rajan / @al94781#harnessing_ddd

Page 61: Harnessing Domain Driven Design

Upstream/Downstream

cc: archer10 (Dennis) (73M Views) - https://www.flickr.com/photos/22490717@N02

@gaythu_rajan / @al94781#harnessing_ddd

Page 62: Harnessing Domain Driven Design

Partnership

cc: practicalowl - https://www.flickr.com/photos/55046645@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 63: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Partnership

Page 64: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 65: Harnessing Domain Driven Design

Customer-Supplier

cc: TheeErin - https://www.flickr.com/photos/27073477@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 66: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Customer-Supplier

Page 67: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd @gaythu_rajan / @al94781#harnessing_ddd

Page 68: Harnessing Domain Driven Design

Anti-Corruption Layer

@gaythu_rajan / @al94781#harnessing_ddd

Page 69: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Anti-Corruption Layer

Upstream

Downstream

Page 70: Harnessing Domain Driven Design

@gaythu_rajan / @al94781#harnessing_ddd

Page 71: Harnessing Domain Driven Design

Done Done

cc: jayneandd - https://www.flickr.com/photos/8180853@N07

@gaythu_rajan / @al94781#harnessing_ddd

Page 72: Harnessing Domain Driven Design

Take Home Messages

cc: Manoj Kengudelu - https://www.flickr.com/photos/11767573@N02

• Find the right Microservices - or you’ll pine for the Monolith

@gaythu_rajan / @al94781#harnessing_ddd

Page 73: Harnessing Domain Driven Design

Take Home Messages

cc: Manoj Kengudelu - https://www.flickr.com/photos/11767573@N02

• Find the right Microservices - or you’ll pine for the Monolith

• Don’t get confused about BCs - they will fall out if you listen to the Language

@gaythu_rajan / @al94781#harnessing_ddd

Page 74: Harnessing Domain Driven Design

Take Home Messages

• Find the right Microservices - or you’ll pine for the Monolith

• Don’t get confused about BCs - they will fall out if you listen to the Language

• Organise around your services better - apply the Strategic Patterns

cc: Manoj Kengudelu - https://www.flickr.com/photos/11767573@N02

@gaythu_rajan / @al94781#harnessing_ddd

Page 75: Harnessing Domain Driven Design

Take Home Messages

• Find the right Microservices - or you’ll pine for the Monolith

• Don’t get confused about BCs - they will fall out if you listen to the Language

• Organise around your services better - apply the Strategic Patterns

• Be inspired to do more Domain Driven Designcc: Manoj Kengudelu - https://www.flickr.com/photos/11767573@N02

@gaythu_rajan / @al94781#harnessing_ddd

Page 76: Harnessing Domain Driven Design

And Finally...

cc: oatsy40 - https://www.flickr.com/photos/68089229@N06

@gaythu_rajan / @al94781#harnessing_ddd

Page 77: Harnessing Domain Driven Design

Questions Please

cc: Derek Bridges - https://www.flickr.com/photos/84949728@N00

@gaythu_rajan / @al94781#harnessing_ddd

Page 78: Harnessing Domain Driven Design

Oh, and we (Capgemini ) are hiring!(visit bit.ly/cg-jvm-jobs-ddd)

cc: ptrlx - https://www.flickr.com/photos/58615912@N05

@gaythu_rajan / @al94781#harnessing_ddd

Page 79: Harnessing Domain Driven Design

Read More...• https://capgemini.github.io/

architecture/microservices-reality-check/• https://capgemini.github.io/

architecture/why-microservices-are-right-for-us-pt1/

• https://capgemini.github.io/architecture/microservices-like-change/

• https://capgemini.github.io/architecture/microservices-gotchas/

cc: Manoj Kengudelu - https://www.flickr.com/photos/11767573@N02

@gaythu_rajan / @al94781#harnessing_ddd