Domain Driven Domain Driven Design with relational Design with - - PowerPoint PPT Presentation

domain driven domain driven design with relational design
SMART_READER_LITE
LIVE PREVIEW

Domain Driven Domain Driven Design with relational Design with - - PowerPoint PPT Presentation

21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. Domain Driven Domain Driven Design with relational Design with relational Databases and Spring Databases and Spring Data JDBC. Data JDBC.


slide-1
SLIDE 1 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 1/59

Domain Driven Domain Driven Design with relational Design with relational Databases and Spring Databases and Spring Data JDBC. Data JDBC.

slide-2
SLIDE 2 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 2/59

Preface: Buying a Sofa. Preface: Buying a Sofa.

Can you help me pick up my new sofa? Can you help me pick up my new sofa? Can you help me pick up my new sofa?

slide-3
SLIDE 3 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 3/59

And now to something completely And now to something completely different! different!

slide-4
SLIDE 4 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 4/59

Relational Databases are awesome. Relational Databases are awesome.

slide-5
SLIDE 5 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 5/59

DRY. DRY.

slide-6
SLIDE 6 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 6/59

Strong consistency. Strong consistency.

slide-7
SLIDE 7 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 7/59

Mathematically sound. Mathematically sound.

slide-8
SLIDE 8 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 8/59

Extremely powerful query language. Extremely powerful query language.

slide-9
SLIDE 9 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 9/59
slide-10
SLIDE 10 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 10/59

But there are problems! But there are problems!

slide-11
SLIDE 11 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 11/59

Scalability Scalability

slide-12
SLIDE 12 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 12/59

Foreign keys cause locks. Foreign keys cause locks.

slide-13
SLIDE 13 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 13/59

Foreign keys cost resources. Foreign keys cost resources.

slide-14
SLIDE 14 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 14/59

Schemas don’t scale across servers. Schemas don’t scale across servers.

slide-15
SLIDE 15 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 15/59

The ORM disaster. The ORM disaster.

slide-16
SLIDE 16 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 16/59

Entity == Table. Entity == Table.

slide-17
SLIDE 17 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 17/59

Property == Column. Property == Column.

slide-18
SLIDE 18 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 18/59

What about references? What about references?

slide-19
SLIDE 19 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 19/59

Lazy loading? Lazy loading?

slide-20
SLIDE 20 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 20/59

Eager loading? Eager loading?

slide-21
SLIDE 21 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 21/59

JPA offers both! JPA offers both!

slide-22
SLIDE 22 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 22/59

What about persisting/deleting? What about persisting/deleting?

slide-23
SLIDE 23 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 23/59

(Optimistic) Locking? (Optimistic) Locking?

slide-24
SLIDE 24 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 24/59

How about testing? How about testing?

slide-25
SLIDE 25 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 25/59

The solution comes from 2004. The solution comes from 2004.

Actually it’s from the 1990s! Actually it’s from the 1990s! Actually it’s from the 1990s!

slide-26
SLIDE 26 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 26/59

DDD DDD

slide-27
SLIDE 27 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 27/59

Aggregates. Aggregates.

Domain-Driven Design — Eric Evans

An AGGREGATE is a cluster of associated An AGGREGATE is a cluster of associated An AGGREGATE is a cluster of associated

  • bjects that we treat as a unit.
  • bjects that we treat as a unit.
  • bjects that we treat as a unit.
slide-28
SLIDE 28 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 28/59
slide-29
SLIDE 29 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 29/59

Aggregate Root. Aggregate Root.

slide-30
SLIDE 30 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 30/59
slide-31
SLIDE 31 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 31/59

Aggregates are Boundaries of integrity Aggregates are Boundaries of integrity

slide-32
SLIDE 32 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 32/59

Transactional consistency inside Transactional consistency inside

slide-33
SLIDE 33 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 33/59

Eventual consistency between Eventual consistency between aggregates aggregates

slide-34
SLIDE 34 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 34/59
slide-35
SLIDE 35 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 35/59

How to represent this in Java? How to represent this in Java?

slide-36
SLIDE 36 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 36/59

Annotations!!!! Annotations!!!!

slide-37
SLIDE 37 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 37/59
slide-38
SLIDE 38 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 38/59

No References Across Aggregates No References Across Aggregates

— David Masters

It makes life much easier if you just keep a It makes life much easier if you just keep a It makes life much easier if you just keep a reference of the aggregate’s ID rather than reference of the aggregate’s ID rather than reference of the aggregate’s ID rather than the actual aggregate itself. the actual aggregate itself. the actual aggregate itself.

slide-39
SLIDE 39 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 39/59

It cuts down complexity It cuts down complexity

slide-40
SLIDE 40 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 40/59

What to load/persist/delete? What to load/persist/delete?

Everything within an aggregate. Everything within an aggregate. Everything within an aggregate.

slide-41
SLIDE 41 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 41/59

Optimistic locking of collections? Optimistic locking of collections?

Lock on the aggregate root. Lock on the aggregate root. Lock on the aggregate root.

slide-42
SLIDE 42 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 42/59

How about testing? How about testing?

Nobody cares if the entity referenced by an id exists. Nobody cares if the entity referenced by an id exists. Nobody cares if the entity referenced by an id exists.

slide-43
SLIDE 43 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 43/59

No M:1 or M:N No M:1 or M:N

except via IDs except via IDs except via IDs

slide-44
SLIDE 44 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 44/59

But, but the Foreign Keys! But, but the Foreign Keys!

slide-45
SLIDE 45 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 45/59

Separate data store. Separate data store.

slide-46
SLIDE 46 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 46/59

Deferred constraints. Deferred constraints.

slide-47
SLIDE 47 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 47/59

Normal Foreign Constraints. Normal Foreign Constraints.

slide-48
SLIDE 48 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 48/59

What about Spring Data JDBC? What about Spring Data JDBC?

slide-49
SLIDE 49 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 49/59

Spring Data implements repositories. Spring Data implements repositories.

slide-50
SLIDE 50 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 50/59

Spring Data JDBC follows the Spring Data JDBC follows the described model. described model.

slide-51
SLIDE 51 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 51/59

Persistence via JDBC. Persistence via JDBC.

slide-52
SLIDE 52 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 52/59

Everything referenced gets persisted. Everything referenced gets persisted.

slide-53
SLIDE 53 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 53/59

Code. Code.

slide-54
SLIDE 54 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 54/59

Resources. Resources.

slide-55
SLIDE 55 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 55/59

Vaughn Vernon Vaughn Vernon

Effective Aggregate Design - Part I Effective Aggregate Design - Part I Effective Aggregate Design - Part I Effective Aggregate Design - Part II Effective Aggregate Design - Part II Effective Aggregate Design - Part II Effective Aggregate Design - Part III Effective Aggregate Design - Part III Effective Aggregate Design - Part III

slide-56
SLIDE 56 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 56/59

Spring Data JDBC Spring Data JDBC

Introducing Spring Data JDBC Introducing Spring Data JDBC Introducing Spring Data JDBC Spring Data JDBC - References and Aggregates Spring Data JDBC - References and Aggregates Spring Data JDBC - References and Aggregates

slide-57
SLIDE 57 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 57/59

DDD vs JPA DDD vs JPA

Advancing Enterprise DDD Advancing Enterprise DDD Advancing Enterprise DDD

slide-58
SLIDE 58 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 58/59

Ted Neward Ted Neward

The Vietnam of Computer Science The Vietnam of Computer Science The Vietnam of Computer Science

slide-59
SLIDE 59 21/02/2019 Domain Driven Design with relational Databases and Spring Data JDBC. http://blog.schauderhaft.de/talk-ddd-jdbc/talk.html?print-pdf#/ 59/59

@jensschauder #etffm19 #dddJdbc

Jens Schauder Jens Schauder

Dad, Board&Roleplaying Gamer, Runner, Bouldering, Dad, Board&Roleplaying Gamer, Runner, Bouldering, Dad, Board&Roleplaying Gamer, Runner, Bouldering, Freeletics Masochist Freeletics Masochist Freeletics Masochist + JUG Organizer JUG Organizer JUG Organizer Slides online: http://bit.ly/ddd-jdbc Slides online: http://bit.ly/ddd-jdbc Slides online: http://bit.ly/ddd-jdbc