domain driven design in c#3.0

33
DDD with C# 3.0 features: Solar System Simulation Andre Boonzaaijer, Pieter-Joost van de Sande {aboonzaaijer, pjvdsande}@sogyo.nl http://born2code.net | http://whiletrue.nl | http://sogyo.nl

Upload: pieter-joost-van-de-sande

Post on 22-Nov-2014

3.309 views

Category:

Business


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Domain Driven Design In C#3.0

DDD with C# 3.0 features: Solar

System SimulationAndre Boonzaaijer, Pieter-Joost van de Sande

{aboonzaaijer, pjvdsande}@sogyo.nl

http://born2code.net | http://whiletrue.nl | http://sogyo.nl

Page 2: Domain Driven Design In C#3.0

Today’s agenda

• DDD – short intro• Case: Problem definition• Case: C# (2.0) solution• Case: C# 3.0 extensions• Demo

2

Page 3: Domain Driven Design In C#3.0

What is “Domain Driven”?

3

Page 4: Domain Driven Design In C#3.0

It’s not: Layering

4

Presentation Layer

Data Layer

Page 5: Domain Driven Design In C#3.0

Layering

5

Presentation Layer

Data Layer

Business logic

Page 6: Domain Driven Design In C#3.0

Layering

6

Presentation Layer

Data Layer

Business logic

Page 7: Domain Driven Design In C#3.0

Layering

7

Presentation Layer

Data Layer

Business logic

Page 8: Domain Driven Design In C#3.0

Layering

8

Presentation Layer

Data Layer

Business logic

+/- 2 years

Page 9: Domain Driven Design In C#3.0

Layering

9

Presentation Layer

Data Layer

Business logic

+/- 2 years

+/- 5 years

Page 10: Domain Driven Design In C#3.0

Layering

10

Presentation Layer

Data Layer

Business logic

+/- 2 years

+/- 5 years

?

Page 11: Domain Driven Design In C#3.0

Layering

11

Presentation Layer

Data Layer

Business logic Email

SMS

Printing

Email

Where?

Page 12: Domain Driven Design In C#3.0

Layering

12

Presentation Layer

Data Layer

Business logic

Page 13: Domain Driven Design In C#3.0

Sunflower

13

Page 14: Domain Driven Design In C#3.0

Case…

• Build a runnable solar system simulator– 1 star in the centre– Configurable amount of planets (mass is max

1% of the star’s mass)– Laws of physics:

• F = M * a• Fg = M1*M2 / d^2

– Starting point: Random generated• Draft a domain model.

14

Page 15: Domain Driven Design In C#3.0

Gravity

15

(x,y)

force = 0;Foreach body in universe force += body.getForce(x,y);

body.move(force);

Page 16: Domain Driven Design In C#3.0

Domain

16

Page 17: Domain Driven Design In C#3.0

Wrapping the domain

17

UserInterface

Clock

Database

Bootstrapper / Host

Page 18: Domain Driven Design In C#3.0

User Interface

18

Page 19: Domain Driven Design In C#3.0

Clock

• Standard implementation• Configurable interval• Start(), Stop(), Tick event

19

Page 20: Domain Driven Design In C#3.0

Database

• O/R bridging– Table per domain class– Column for public properties (discussion)– Associations converted to foreign keys

20

?

Page 21: Domain Driven Design In C#3.0

Bootstrap• Instantiation (create form, clock and universe

components)

• Event subscription

21

Page 22: Domain Driven Design In C#3.0

Domain in C# 3.0

22

Page 23: Domain Driven Design In C#3.0

Domain in C# 3.0

23

Page 24: Domain Driven Design In C#3.0

Universe class Methods

• TimerPassed() method - ‘Classic’

- Lambda:

24

Page 25: Domain Driven Design In C#3.0

Universe class Methods

• GetPlanetsInRange() Method

25

Page 26: Domain Driven Design In C#3.0

Universe class Methods

• GetPlanetsInRange() Method: Lambda

26

Page 27: Domain Driven Design In C#3.0

Universe class Methods

• GetPlanetsInRange() Method: LINQ

27

Page 28: Domain Driven Design In C#3.0

Form1 class Methods

28

DrawUniverse: Who is responsible?UI.DrawUniverse() vs

Universe.Draw()

Page 29: Domain Driven Design In C#3.0

Universe.Draw() Extension

29

Page 30: Domain Driven Design In C#3.0

Universe.Draw() Extension

30

Page 31: Domain Driven Design In C#3.0

Extension Methods: How

• Add a Static class to your namespace• Add static methods for each extension• Add a ‘this’ parameter to the ext. method

31

Page 32: Domain Driven Design In C#3.0

Refences

• DDD Masterclass (http://domaindrivendesign.nl)• Rebecca Wirfs-Brock: Object Design• Eric Evans: Domain Driven Design

• Blogs– http://born2code.net– http://whiletrue.nl– http://software-innovators.nl

32

Page 33: Domain Driven Design In C#3.0

33