233
@cyriux Cyrille Martraire DDDPatterns Beyond the Blue Book

DDD patterns that were not in the book

Embed Size (px)

Citation preview

Page 1: DDD patterns that were not in the book

@cyriuxCyrille Martraire

DDDPatternsBeyond the Blue Book

Page 2: DDD patterns that were not in the book

Event Storming Event Sourcing

CQRSDDD

Page 3: DDD patterns that were not in the book
Page 4: DDD patterns that were not in the book
Page 5: DDD patterns that were not in the book

Whatwasbefore?

Page 6: DDD patterns that were not in the book

Isituseful?

Page 7: DDD patterns that were not in the book

CanIgetbetteratDDDbylookingatthingsoutsideofDDD?

Page 8: DDD patterns that were not in the book

Thistalkistheanswer.

Page 9: DDD patterns that were not in the book

Passionate developer Deliberate Designer

PARIS

Since 1999

@cyriuxCyrille Martraire

Page 10: DDD patterns that were not in the book

Paris Software Craftsmanship Community since 2011

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

Page 11: DDD patterns that were not in the book

arolla.fr @arollafr

Page 12: DDD patterns that were not in the book

arolla.fr @arollafr

TDDBDDDDD

Page 13: DDD patterns that were not in the book
Page 14: DDD patterns that were not in the book
Page 15: DDD patterns that were not in the book

Software Development

Page 16: DDD patterns that were not in the book

Its history

Page 17: DDD patterns that were not in the book

Software Engineering

Page 18: DDD patterns that were not in the book

Tools, notations, MDA

Page 19: DDD patterns that were not in the book

19

Vendor-sponsored conferences

Page 20: DDD patterns that were not in the book

Fortunately

Page 21: DDD patterns that were not in the book

Eric Evans - Domain-Driven Design

Page 22: DDD patterns that were not in the book
Page 23: DDD patterns that were not in the book
Page 24: DDD patterns that were not in the book

ShoulditbetheonlybooktoreadtolearnDomain-DrivenDesign?

THE ONE & ONLY BOOK?

Page 25: DDD patterns that were not in the book

Anyheadlinethatendsinaquestionmarkcanbeansweredbyno.

Page 26: DDD patterns that were not in the book

EricEvansadvocatesinhisbooktolookoutsideformorepatterns&

inspirations.

Page 27: DDD patterns that were not in the book

Idid.

Page 28: DDD patterns that were not in the book

ForthistalkIhaveselected43patternsandI'mgoingtoexplainthem

onebyonenow.

Page 29: DDD patterns that were not in the book

<Facepalm>

Page 30: DDD patterns that were not in the book

OK.

Page 31: DDD patterns that were not in the book
Page 32: DDD patterns that were not in the book

"The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”

— Cunningham’s Law

Page 33: DDD patterns that were not in the book

Ward Cunningham

WIKI XP

CRC Cards

Page 34: DDD patterns that were not in the book

Ward Cunningham

Patterns in software!

Page 35: DDD patterns that were not in the book

http://c2.com/ppr/checks.html

DDD Inspiration

Page 36: DDD patterns that were not in the book

CHECKS Patterns

1. Whole Value 2. Exceptional cases (absence, error…)3. Meaningless Behavior 4. Echo Back 5. Visible Implication 6. Deferred Validation 7. Instant Projection 8. Hypothetical Publication 9. Forecast Confirmation 10. Diagnostic Query Analysis Patterns

Page 37: DDD patterns that were not in the book

25m+10m=35m

(Custom Arithmetics)

Whole Object with unit.

Whole Object

Page 38: DDD patterns that were not in the book

Whole Object

#NoPrimitive

”Becausebits,stringsandnumberscanbeusedtorepresentalmostanything,anyone

inisolationmeansalmostnothing.”

Page 39: DDD patterns that were not in the book

Exceptional Value

NaNUnde:ined

NotApplicable

25m+NaN=NaN

Don’tclutteryourcodewithspecialcasehanding

Page 40: DDD patterns that were not in the book

goingfurther…

Page 41: DDD patterns that were not in the book

Cashflow Sequence +

Cashflow Sequence =

Cashflow Sequence

Monoid

Page 42: DDD patterns that were not in the book

Could we say that?

Hotel Booking Jan 26 to 27 Hotel Booking

Jan 27 to 29

Hotel Booking Jan 26 to 29

+=

Monoid

Page 43: DDD patterns that were not in the book

Monoids Vector Spaces Cyclic Groups

Page 44: DDD patterns that were not in the book

Monoidsadvertisementbroughttoyouby

@cyriux!

Page 45: DDD patterns that were not in the book

CHECKS Patterns Traceability

Normal display: 652 MM USD EQV

Diagnostic display: 622,456,325.07 USD + 3,624,878,450 JPY + 23,549.54 FRF

Page 46: DDD patterns that were not in the book

CHECKS Patterns

1. Whole Value 2. Exceptional cases (absence, error…)3. Meaningless Behavior 4. Echo Back 5. Visible Implication 6. Deferred Validation 7. Instant Projection 8. Hypothetical Publication 9. Forecast Confirmation 10. Diagnostic Query Analysis Patterns

Page 47: DDD patterns that were not in the book
Page 48: DDD patterns that were not in the book

THE WORLD’s

FIRST WIKI

Page 49: DDD patterns that were not in the book
Page 50: DDD patterns that were not in the book

PLoP98

Page 51: DDD patterns that were not in the book
Page 52: DDD patterns that were not in the book

Mind the biblio

Page 53: DDD patterns that were not in the book
Page 54: DDD patterns that were not in the book

In most domain models, most design

patterns are technical noise.

observerSingleton

FactoryCommand

VISITOR

MEDIATOR

Manager

observer

PROXY

FACADE

MEMENTO

Page 55: DDD patterns that were not in the book

But some design patterns also describe business domain concepts and relations.

Page 56: DDD patterns that were not in the book

Composite Interpreter Flyweight Strategy

Page 57: DDD patterns that were not in the book

observerSingleton

FactoryCommand

VISITOR

MEDIATOR

Manager

observer

PROXY

FACADE

MEMENTO

Good-Old hint: ”Use pattern names in type

names.”

Page 58: DDD patterns that were not in the book

In a domain model, avoid pattern names

in types name s.

Page 59: DDD patterns that were not in the book

DateAdjustmentStrategy

Strategy

Page 60: DDD patterns that were not in the book

DateAdjustment DayShiftMethod EndOfMonthRule RoundingConvention CalculationMode

Strategy

Page 61: DDD patterns that were not in the book

DateAdjustment DayShiftMethod EndOfMonthRule RoundingConvention CalculationMode

Strategy

Belongs to the Ubiquitous Language

Page 62: DDD patterns that were not in the book

ReimbursementPolicy EligibilityCriterion AcceptanceSpecification

Strategy

Belongs to the Ubiquitous Language

Page 63: DDD patterns that were not in the book

AccountingValuation NetPresentValueValuation LinearValuation BenchmarkBasedValuation AssetBasedValuation

Strategy

Page 64: DDD patterns that were not in the book

AccountingValuations NetPresentValueValuation LinearValuation BenchmarkBasedValuation AssetBasedValuation

Strategy

Belongs to the Ubiquitous Language

Page 65: DDD patterns that were not in the book

AccountingValuations NetPresentValueValuation LinearValuation BenchmarkBasedValuation AssetBasedValuation

Strategy

No Noise

Page 66: DDD patterns that were not in the book

ValuationImpl

Strategy

Page 67: DDD patterns that were not in the book

Strategy PatternVAT

VAT on net price

Not Applicable

Calculation

+ Null Object

Page 68: DDD patterns that were not in the book

Null Object.

No, you should not replace every

Null Object with Optional<T>

Page 69: DDD patterns that were not in the book

When to apply a pattern? (or not)

Page 70: DDD patterns that were not in the book

IF Statements vs. Strategy pattern?

Naming-Driven

Whichever reveals the business domain best

Page 71: DDD patterns that were not in the book

AccountingValuation NetPresentValueValuation LinearValuation BenchmarkBasedValuation AssetBasedValuation

Strategy

Page 72: DDD patterns that were not in the book

DateAdjustmentStrategy

Domain Patterns

#NotInMyName

Page 73: DDD patterns that were not in the book

Annotate classes with custom annotationsStereotypes Annotations

Page 74: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate classes with custom annotations

Page 75: DDD patterns that were not in the book

Domain type names are precious. They are for

domain naming.

Use annotations to document the

stereotypes instead.

Page 76: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate classes with custom annotations

Embedded Learning

Page 77: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate with custom annotations

Page 78: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate with custom annotations

Page 79: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate domain classes with custom annotations

Page 80: DDD patterns that were not in the book

Stereotypes AnnotationsAnnotate domain classes with custom annotations

Page 81: DDD patterns that were not in the book

And learn on the job!

Page 82: DDD patterns that were not in the book

https://leanpub.com/livingdocumentation

BUY MY BOOK!

LIVING DOCUMENTATION

Page 83: DDD patterns that were not in the book

AndnowformoreObject-OrientedPatterns

Page 84: DDD patterns that were not in the book

But Cyrille, Nobody does

Object-Oriented anymore!

Page 85: DDD patterns that were not in the book

NOW WE DO FP!

#NoPAttern

Page 86: DDD patterns that were not in the book

EvergreenSKILLS

Page 87: DDD patterns that were not in the book

Evergreen skills are worth learning

Page 88: DDD patterns that were not in the book

Sonow…IntroducingtheFlyweight

pattern!

Page 89: DDD patterns that were not in the book

Flyweight

Intent:Usesharingtosupportlargenumbersof[ine-grainedobjectsef[iciently

Page 90: DDD patterns that were not in the book

”Hahaha. Nobody uses the

Flyweight”

Page 91: DDD patterns that were not in the book

A matter of Compression

= 3x

Page 92: DDD patterns that were not in the book

503010 …

Flyweight

BUY SELL

Page 93: DDD patterns that were not in the book

503010 …

Flyweight

We always want to make multiplicity manageable

Page 94: DDD patterns that were not in the book

503010 …

-503010 …

Flyweight

Page 95: DDD patterns that were not in the book

-503010 …

{10, 30, -50 …}

Flyweight

Page 96: DDD patterns that were not in the book

{10, 30, -50 …}

∑ = -10

Flyweight

Page 97: DDD patterns that were not in the book

∑ = -10

manageable = aggregable, comparable…

Flyweight

Page 98: DDD patterns that were not in the book

Equity Trading:

Standard Stock

Multiple Trades of the same

$10M-

$30M- -

$50Mx

Page 99: DDD patterns that were not in the book

$10MIBM

$30MIBM AXA

$50M

Derivative Trading:

Multiple Contracts with a common structure

Page 100: DDD patterns that were not in the book

$10MIBM

$30MIBM AXA

$50M

Derivative Trading:

x

Page 101: DDD patterns that were not in the book

$10MIBM

$30MIBM AXA

$50M

The essence of Flyweight

x

Many small, calculable elements One BlackboxIntrinsicExtrinsic

Page 102: DDD patterns that were not in the book

#WIN

Flyweight

Page 103: DDD patterns that were not in the book

#WIN

Page 104: DDD patterns that were not in the book

This never works.

Page 105: DDD patterns that were not in the book

I see what you mean…

BUT no way, IT DOES NOT WORK from a legal

perspective!

Page 106: DDD patterns that were not in the book
Page 107: DDD patterns that were not in the book
Page 108: DDD patterns that were not in the book

FATAL

OBJECTION

Page 109: DDD patterns that were not in the book

FATAL

OBJECTION as hint of bounded

Context!

Page 110: DDD patterns that were not in the book

Tip: Focus on one context

=

≠≠

Page 111: DDD patterns that were not in the book

Works in this context only

=

≠≠

Legal

Money Management

Page 112: DDD patterns that were not in the book

It works in my context!

=≠

Transport Regulation

Cargo Shipping

Page 113: DDD patterns that were not in the book

In what PERSPECTIVE could

we say that?

Bounded Context

Page 114: DDD patterns that were not in the book

Different Bounded Contexts,

Different Patterns.

Page 115: DDD patterns that were not in the book

Different Patterns, Different Bounded

Contexts.

Page 116: DDD patterns that were not in the book

#WorksInMyContext

Page 117: DDD patterns that were not in the book

HEY CYRILLE

Page 118: DDD patterns that were not in the book

WHY U SOFASCINATEDwith patterns?

Page 119: DDD patterns that were not in the book

Would you build Photoshop only

with IF statements and FOR loops?

Page 120: DDD patterns that were not in the book
Page 121: DDD patterns that were not in the book

for (...) if (...)

if (..) {

for... }

else else

while

Page 122: DDD patterns that were not in the book

for (...) if (...)

if (..) {

for... }

else else

while

Page 123: DDD patterns that were not in the book

You should have a look at

design patterns!

Page 124: DDD patterns that were not in the book

Strategy+

State=

EASY AGAIN!

Page 125: DDD patterns that were not in the book

Patterns

ABUSE (Like every beginner)

Page 126: DDD patterns that were not in the book

ThenIdiscoveredMartinFowler

Page 127: DDD patterns that were not in the book
Page 128: DDD patterns that were not in the book
Page 129: DDD patterns that were not in the book

Event Sourcing-ish

Page 130: DDD patterns that were not in the book

Retail Banking

Medical Care

Page 131: DDD patterns that were not in the book
Page 132: DDD patterns that were not in the book

Traceability

Page 133: DDD patterns that were not in the book

Patterns illustrate deeper principles.

Page 134: DDD patterns that were not in the book

Traceability always points to the Past.

(aka. Consequences depend on the Cause)

Page 135: DDD patterns that were not in the book

ORDERBASKET

PAYMENTRETURN

timerefers torefers torefers to

causality

e-commerce

Page 136: DDD patterns that were not in the book

Study the patterns. Digest the principles.

Apply to new domains.

Page 137: DDD patterns that were not in the book
Page 138: DDD patterns that were not in the book

CLAIMINSURANCE

POLICYLOSS

$ PAYMENT

timerefers torefers torefers to

causality

Insurance

Page 139: DDD patterns that were not in the book

EvergreenSKILLS

Page 140: DDD patterns that were not in the book

Different domains, same principle

Page 141: DDD patterns that were not in the book

SuppleDomainModels

BespokeCode

Page 142: DDD patterns that were not in the book

Bespoke, Custom. OK.

Reinventing the Wheel. NOT OK.

Page 143: DDD patterns that were not in the book
Page 144: DDD patterns that were not in the book
Page 145: DDD patterns that were not in the book

https://martinfowler.com/eaaDev/timeNarrative.html

Temporal Property

Page 146: DDD patterns that were not in the book

https://martinfowler.com/eaaDev/timeNarrative.html

Snapshot

Page 147: DDD patterns that were not in the book

https://martinfowler.com/eaaDev/timeNarrative.html

Temporal Object

Page 148: DDD patterns that were not in the book

Effectivity Range

Agreement v1 - effectivity: [01/2016, 01/2017[ Agreement v2 - effectivity: [01/2017, 01/2018[

Agreement v3 - effectivity: [01/2018, - [

Invariant:rangesarecontinuous&non-overlapping

Page 149: DDD patterns that were not in the book

Effectivity Range

Agreement v1 - effectivity: [01/2016, 01/2017[ Agreement v2 - effectivity: [01/2017, 01/2018[

Agreement v3 - effectivity: [01/2018, - [

06/2017

Invariant:rangesarecontinuous&non-overlappingWhat version was

effective on this date?

Page 150: DDD patterns that were not in the book

https://martinfowler.com/eaaDev/timeNarrative.html

Bi-temporal Time

Time has two dimensions in software!

Page 151: DDD patterns that were not in the book

[…] you may have only additive changes. An additive change

always goes onto the end of the record.

https://martinfowler.com/eaaDev/timeNarrative.html

Append-onlyCompensation

Page 152: DDD patterns that were not in the book

[…] you may have only additive changes. An additive change

always goes onto the end of the record.

https://martinfowler.com/eaaDev/timeNarrative.html

Event-Sourcing-ish

Page 153: DDD patterns that were not in the book

Excellent Design Teaching Material

Page 154: DDD patterns that were not in the book

Learn the history, not just the end state.

Learning Steps

(à la Event Sourcing)

Page 155: DDD patterns that were not in the book

Know the Holy Family

:)

Page 156: DDD patterns that were not in the book

Illustrious Ancestors

Page 157: DDD patterns that were not in the book

Rebecca J. Wirfs-Brock

First RDD paper in 1989!

Page 158: DDD patterns that were not in the book

http://tonyprusac.blogspot.fr/2015/11/deco2300-week-6.html

CRC Cards

Page 159: DDD patterns that were not in the book

Event Storming Ancestor

@mathiasverraes@ziobrando

Page 160: DDD patterns that were not in the book
Page 161: DDD patterns that were not in the book

MOAR ANALYSISPATTERNS

Page 162: DDD patterns that were not in the book

TO DESIGNDOMAINMODELS

Page 163: DDD patterns that were not in the book

Not just CodeAlso Ideas!

Reuse all the things!

And past insights

Page 164: DDD patterns that were not in the book

164

A Business Transaction

A quantity of something (e.g. cash)

A quantity of something

else

Page 165: DDD patterns that were not in the book

165

A Business Transaction

A quantity of something (e.g. cash)

A quantity of something

else

Law: one side has to be cash

Page 166: DDD patterns that were not in the book

166

A Business Transaction

A quantity of something (e.g. cash)

A quantity of something

else

Received Date

Paid Date

Trade Date

Page 167: DDD patterns that were not in the book

Congratulations! You can now reuse

this domain insight!

Page 168: DDD patterns that were not in the book

WHY NOT WRITE YOUR OWN PATTERNS?

Page 169: DDD patterns that were not in the book
Page 170: DDD patterns that were not in the book

SO MANY ANALYSISPATTERNS

Page 171: DDD patterns that were not in the book

TO DESIGNDOMAINMODELS

Page 172: DDD patterns that were not in the book

Most developers have never seen a

domain model. They've only seen

data models.

Page 173: DDD patterns that were not in the book

WHAT’S A DOMAIN MODEL?

Page 174: DDD patterns that were not in the book

Let’s take an example

Page 175: DDD patterns that were not in the book

Loan Approval

Loan Application

System

Credit Bureau

Signatures

Requests Approval

100k$

Approved/ Rejected

Page 176: DDD patterns that were not in the book

Loan Approval

Loan Application

System

Credit Bureau

Signatures

Requests Approval

100k$change

to90k$

Accept with in-place mutation :(

Page 177: DDD patterns that were not in the book
Page 178: DDD patterns that were not in the book

Do you approve

this 100k$ loan?

Page 179: DDD patterns that were not in the book

I approved this 90k$

loan!

Do you approve

this 100k$ loan?

Page 180: DDD patterns that were not in the book

… What do I do

with that now?!!

Page 181: DDD patterns that were not in the book

Answering a different question is

rude!

(plus sync back the mutation is not so easy)

Page 182: DDD patterns that were not in the book

What if we just reject with a

suggestion to change the amount before

re-submit?

Page 183: DDD patterns that were not in the book

In other words:

”Single Path to Approval”

Jez Humble and David Farley, “Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation”, Addison Wesley Professional, 2010

Page 184: DDD patterns that were not in the book

In other words:

”Single Path to Approval”Production

Jez Humble and David Farley, “Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation”, Addison Wesley Professional, 2010

Continuous Delivery

Page 185: DDD patterns that were not in the book

Loan Approval

Loan Application

System

Credit Bureau

Signatures

Reject + suggest reduced amount

Requests Approval

100k$OK for

90k$x

Approved/ Rejected

Page 186: DDD patterns that were not in the book

No patch here!Fix the source then commit as usual

Page 187: DDD patterns that were not in the book

No way! It would delay the process!

Plus we don’t want to ask approvers to sign

again!

Business

Page 188: DDD patterns that were not in the book

OK.

Still, perhaps we could do it anyway…

Dev Team

Page 189: DDD patterns that were not in the book

OK for 100k$

➜ a fortiori OK for 90k$

”A fortiori principle”No need to sign again!

Page 190: DDD patterns that were not in the book

Now we need to codify accurately what a fortiori means.

That’s modeling the domain.

Page 191: DDD patterns that were not in the book

Not that hard: Lower risk -> a fortiori OK.

Page 192: DDD patterns that were not in the book

Domain Modeling means forming an opinion on how it

behaves.

Page 193: DDD patterns that were not in the book

Programming as Theory-Building

— Peter Naur (1985)

Page 194: DDD patterns that were not in the book

Anything can be an inspiration.

Even Continuous Delivery patterns!

Page 195: DDD patterns that were not in the book

Let’s take another example

Page 196: DDD patterns that were not in the book

Only rebuild what needs to be rebuilt after a change

Given a set of source code files

Page 197: DDD patterns that were not in the book

http://maemo.org/maemo_release_documentation/maemo4.1.x/node5.html

Page 198: DDD patterns that were not in the book

http://maemo.org/maemo_release_documentation/maemo4.1.x/node5.html

Page 199: DDD patterns that were not in the book

http://maemo.org/maemo_release_documentation/maemo4.1.x/node5.html

Imagine doing that with a workflow

engine?

Page 200: DDD patterns that were not in the book

GNU Make has an opinion on how to

consider the problem.

Page 201: DDD patterns that were not in the book

Declare the dependencies. Let the tool find out the

workflow.

Page 202: DDD patterns that were not in the book

http://maemo.org/maemo_release_documentation/maemo4.1.x/node5.html

Page 203: DDD patterns that were not in the book

http://maemo.org/maemo_release_documentation/maemo4.1.x/node5.html

ReviewRisk checkLegal

check

Management Review

Management Review

Product Launch

R&D Done Sales

ReadyMarketing Campaign

Product SpecsProduct Design

Page 204: DDD patterns that were not in the book

A breakthrough in domain modeling

Why insist on using workflow engines

everywhere?

Page 205: DDD patterns that were not in the book

Do you have an opinion on how to

consider the business domain?

Page 206: DDD patterns that were not in the book

(Hint: ”We need Event Sourcing” is probably not the

best answer)

Page 207: DDD patterns that were not in the book

Which pattern?

”Propose several models, choose one.”

Design Spike.Try them.

Page 208: DDD patterns that were not in the book

Which pattern?

from simple to less simple.

Page 209: DDD patterns that were not in the book

Teaching Patterns to your team mates

Page 210: DDD patterns that were not in the book

Mob-Programming

@woodyzuill

Page 211: DDD patterns that were not in the book

https://www.industriallogic.com/blog/design-patterns-playing-cards/

Design Patterns Poker cards

Page 212: DDD patterns that were not in the book

Design Patterns Poker cards

Page 213: DDD patterns that were not in the book

Show the benefits.Don’t preach.

Page 214: DDD patterns that were not in the book

Own Internal Branding

You don’t have to talkFlyweight or Monoid

Page 215: DDD patterns that were not in the book

The best code sample for training is your own code base.

Embedded Learning

Page 216: DDD patterns that were not in the book
Page 217: DDD patterns that were not in the book

YOU DIDN’T SEE ALL THESE PATTERNS

BEFORE?

Page 218: DDD patterns that were not in the book

You probably procrastinate on

tech stuff.

Page 219: DDD patterns that were not in the book

No, you probably don’t need this Event Sourcing

here.

Page 220: DDD patterns that were not in the book

You probably should spend more time

Domain Model

Technical Infrastructure

HERE

Page 221: DDD patterns that were not in the book

Design is hard? Do it more often!

Page 222: DDD patterns that were not in the book

From Scratch? Lack of domain maturity makes everything look

CRUD.

Page 223: DDD patterns that were not in the book

Mature Legacy Systems FTW!

Page 224: DDD patterns that were not in the book

NEW HORIZONS

Page 225: DDD patterns that were not in the book

DCI by Jim Coplien #DDDEU

Page 226: DDD patterns that were not in the book

https://blog.acolyer.org/ http://paperswelove.org/

Page 227: DDD patterns that were not in the book

In closing

Page 228: DDD patterns that were not in the book

Many patterns authors. Many patterns.

They converge, mostly. No need to learn them all.

Page 229: DDD patterns that were not in the book

Many patterns authors. Many patterns.

Still, learn more than one!

Page 230: DDD patterns that were not in the book

So many patterns outside the Blue Book

But do you really know all the patterns in the Blue

Book?

Page 231: DDD patterns that were not in the book
Page 232: DDD patterns that were not in the book

Merci !

h$p://cathy313.centerblog.net/539-bisounours

Page 233: DDD patterns that were not in the book

Follow me @cyriux

Slides: slideshare.net/cyriux Blog: cyrille.martraire.com

We offer training, coaching & consulting on DDD, BDD, TDD