domain driven design in c#3.0
DESCRIPTION
TRANSCRIPT
![Page 1: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/3.jpg)
What is “Domain Driven”?
3
![Page 4: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/4.jpg)
It’s not: Layering
4
Presentation Layer
Data Layer
![Page 5: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/5.jpg)
Layering
5
Presentation Layer
Data Layer
Business logic
![Page 6: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/6.jpg)
Layering
6
Presentation Layer
Data Layer
Business logic
![Page 7: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/7.jpg)
Layering
7
Presentation Layer
Data Layer
Business logic
![Page 8: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/8.jpg)
Layering
8
Presentation Layer
Data Layer
Business logic
+/- 2 years
![Page 9: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/9.jpg)
Layering
9
Presentation Layer
Data Layer
Business logic
+/- 2 years
+/- 5 years
![Page 10: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/10.jpg)
Layering
10
Presentation Layer
Data Layer
Business logic
+/- 2 years
+/- 5 years
?
![Page 11: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/11.jpg)
Layering
11
Presentation Layer
Data Layer
Business logic Email
SMS
Printing
Where?
![Page 12: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/12.jpg)
Layering
12
Presentation Layer
Data Layer
Business logic
![Page 13: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/13.jpg)
Sunflower
13
![Page 14: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/16.jpg)
Domain
16
![Page 17: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/17.jpg)
Wrapping the domain
17
UserInterface
Clock
Database
Bootstrapper / Host
![Page 18: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/18.jpg)
User Interface
18
![Page 19: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/19.jpg)
Clock
• Standard implementation• Configurable interval• Start(), Stop(), Tick event
19
![Page 20: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/21.jpg)
Bootstrap• Instantiation (create form, clock and universe
components)
• Event subscription
21
![Page 22: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/22.jpg)
Domain in C# 3.0
22
![Page 23: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/23.jpg)
Domain in C# 3.0
23
![Page 24: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/24.jpg)
Universe class Methods
• TimerPassed() method - ‘Classic’
- Lambda:
24
![Page 25: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/25.jpg)
Universe class Methods
• GetPlanetsInRange() Method
25
![Page 26: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/26.jpg)
Universe class Methods
• GetPlanetsInRange() Method: Lambda
26
![Page 27: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/27.jpg)
Universe class Methods
• GetPlanetsInRange() Method: LINQ
27
![Page 28: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/28.jpg)
Form1 class Methods
28
DrawUniverse: Who is responsible?UI.DrawUniverse() vs
Universe.Draw()
![Page 29: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/29.jpg)
Universe.Draw() Extension
29
![Page 30: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/30.jpg)
Universe.Draw() Extension
30
![Page 31: Domain Driven Design In C#3.0](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051609/5472977bb4af9fcd0a8b4fb1/html5/thumbnails/33.jpg)
33