47
Guerrilla Domain Driven Design All the really important stuff you need to know about Domain Driven Design Jak Charlton www.thinkddd.com Google+ : [email protected] Twitter : @jakcharlton

Domain Driven Design - DDDSydney 2011

Embed Size (px)

Citation preview

Page 1: Domain Driven Design - DDDSydney 2011

Guerrilla Domain Driven DesignAll the really important stuff you need to know about Domain Driven Design

Jak Charlton

www.thinkddd.comGoogle+ : [email protected] : @jakcharlton

Page 2: Domain Driven Design - DDDSydney 2011

“passionate and opinionated”

Page 3: Domain Driven Design - DDDSydney 2011

Domain Driven Design is a methodology for evolving software that closely matches our business

requirements

Page 4: Domain Driven Design - DDDSydney 2011

Domain Driven Design is a way of thinking, and a set of

priorities

Page 5: Domain Driven Design - DDDSydney 2011

Domain : a sphere of Knowledge, Activity or

Influence

Page 6: Domain Driven Design - DDDSydney 2011

For most software projects, the primary focus should be on the domain and domain knowledge

Page 7: Domain Driven Design - DDDSydney 2011

When we set out to write software we never know

enough

Page 8: Domain Driven Design - DDDSydney 2011

Software is an exploration, you never know where you

will end up

Page 9: Domain Driven Design - DDDSydney 2011

Development is iterative

Page 10: Domain Driven Design - DDDSydney 2011

Domain driven team

Page 11: Domain Driven Design - DDDSydney 2011

Get Domain Experts

Page 12: Domain Driven Design - DDDSydney 2011

Developers and domain experts must have a close

relationship

Page 13: Domain Driven Design - DDDSydney 2011

Modelling

Page 14: Domain Driven Design - DDDSydney 2011

Model out loud

Page 15: Domain Driven Design - DDDSydney 2011

Brainstorm and experiment

Page 16: Domain Driven Design - DDDSydney 2011

The model is distilled knowledge

Page 17: Domain Driven Design - DDDSydney 2011

Look for the deep models

Page 18: Domain Driven Design - DDDSydney 2011

Don’t introduce deeper models the domain experts

don’t see

Page 19: Domain Driven Design - DDDSydney 2011

The model is the backbone of a language used by all team

members

Page 20: Domain Driven Design - DDDSydney 2011

The Ubiquitous Language

Page 21: Domain Driven Design - DDDSydney 2011

Domain experts should object to inadequate terms

or structures

Page 22: Domain Driven Design - DDDSydney 2011

Developers should watch for ambiguity or inconsistency

Page 23: Domain Driven Design - DDDSydney 2011

When a term appears in multiple places, you need

context

Page 24: Domain Driven Design - DDDSydney 2011

One team, one language

Page 25: Domain Driven Design - DDDSydney 2011

The term Ubiquitous Language implies there is only one model in play, but there may be many

Page 26: Domain Driven Design - DDDSydney 2011

Keep looking at things differently, keep questioning

and challenging

Page 27: Domain Driven Design - DDDSydney 2011

Maintain an unbroken dialog with domain experts

Page 28: Domain Driven Design - DDDSydney 2011

Write it down, document continually

Page 29: Domain Driven Design - DDDSydney 2011

Documents should talk in terms of the ubiquitous

language

Page 30: Domain Driven Design - DDDSydney 2011

Documents must work for their living, and stay current

Page 31: Domain Driven Design - DDDSydney 2011

A document should not try to do what the code already

does well

Page 32: Domain Driven Design - DDDSydney 2011

If the code doesn’t already convey something well,

perhaps it should be refactored

Page 33: Domain Driven Design - DDDSydney 2011

Use explanatory models , technical models aren’t always

good at explaining things

Page 34: Domain Driven Design - DDDSydney 2011

The model and implementation are intrinsically linked

Page 35: Domain Driven Design - DDDSydney 2011

Expose your models, and avoid abstractions

Page 36: Domain Driven Design - DDDSydney 2011

Refactor when the design doesn’t express the team’s

understanding of the domain

Page 37: Domain Driven Design - DDDSydney 2011

Refactor to deeper insight

Page 38: Domain Driven Design - DDDSydney 2011

Refactor when important concepts are implicit in the

design and can be made explicit

Page 39: Domain Driven Design - DDDSydney 2011

Refactor when you can make the design more supple

Page 40: Domain Driven Design - DDDSydney 2011

Don’t aggressively refactor for the sake of it

Page 41: Domain Driven Design - DDDSydney 2011

Avoid technical virtuosity

Page 42: Domain Driven Design - DDDSydney 2011

Make it as simple as possible, but no simpler

Albert Einstein

Page 43: Domain Driven Design - DDDSydney 2011

Complex is easy, any idiot can do complex

Simple is a lot harder

Jak Charlton

Page 44: Domain Driven Design - DDDSydney 2011

Don’t risk real business value for technical purity

Page 45: Domain Driven Design - DDDSydney 2011

Live in the domain

Page 46: Domain Driven Design - DDDSydney 2011

My objective today was to make you think

I hope I have succeeded

Page 47: Domain Driven Design - DDDSydney 2011

Questions?