Applying Object Composition to Build Rich Domain Models
-
Upload
postsharp-technologies -
Category
Software
-
view
352 -
download
1
Transcript of Applying Object Composition to Build Rich Domain Models
![Page 1: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/1.jpg)
Applying Object Composition to Build Rich Domain Models
Zoran HorvatCEO & Principal Consultant, Coding Helmet Consultancy [email protected] http://codinghelmet.com zoranh75
![Page 3: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/3.jpg)
Watch the webinar recording here:
https://www.postsharp.net/blog/webinar-recording-object-composition
![Page 4: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/4.jpg)
![Page 5: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/5.jpg)
![Page 6: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/6.jpg)
![Page 7: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/7.jpg)
![Page 8: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/8.jpg)
![Page 9: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/9.jpg)
![Page 10: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/10.jpg)
![Page 11: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/11.jpg)
![Page 12: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/12.jpg)
![Page 13: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/13.jpg)
![Page 14: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/14.jpg)
Animal obj = ...
![Page 15: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/15.jpg)
Animal obj = ...if (obj is Mammal){}
![Page 16: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/16.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger}
![Page 17: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/17.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength}
![Page 18: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/18.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}
![Page 19: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/19.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}
![Page 20: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/20.jpg)
![Page 21: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/21.jpg)
![Page 22: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/22.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}
![Page 23: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/23.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}else if (obj is WaterMammal){ WaterMammal mammal = (WaterMammal)obj; // e.g. a whale // Pull mammal’s fins using all your strength // Swim as fast as you can}
![Page 24: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/24.jpg)
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}else if (obj is WaterMammal){ WaterMammal mammal = (WaterMammal)obj; // e.g. a whale // Pull mammal’s fins using all your strength // Swim as fast as you can}
![Page 25: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/25.jpg)
Logicduplication,but no true
code duplication!
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}else if (obj is WaterMammal){ WaterMammal mammal = (WaterMammal)obj; // e.g. a whale // Pull mammal’s fins using all your strength // Swim as fast as you can}
.
![Page 26: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/26.jpg)
Logicduplication,but no true
code duplication!
Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger // Pull mammal’s tail using all your strength // Run as fast as you can}else if (obj is WaterMammal){ WaterMammal mammal = (WaterMammal)obj; // e.g. a whale // Pull mammal’s fins using all your strength // Swim as fast as you can}
.
![Page 27: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/27.jpg)
![Page 28: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/28.jpg)
![Page 29: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/29.jpg)
![Page 30: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/30.jpg)
![Page 31: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/31.jpg)
![Page 32: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/32.jpg)
![Page 33: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/33.jpg)
![Page 34: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/34.jpg)
![Page 35: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/35.jpg)
![Page 36: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/36.jpg)
![Page 37: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/37.jpg)
![Page 38: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/38.jpg)
Watch the webinar recording here:
https://www.postsharp.net/blog/webinar-recording-object-composition
![Page 39: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/39.jpg)
![Page 40: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/40.jpg)
![Page 41: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/41.jpg)
![Page 42: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/42.jpg)
![Page 43: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/43.jpg)
![Page 44: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/44.jpg)
![Page 45: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/45.jpg)
![Page 46: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/46.jpg)
![Page 47: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/47.jpg)
![Page 48: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/48.jpg)
Watch the webinar recording here:
https://www.postsharp.net/blog/webinar-recording-object-composition
![Page 49: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/49.jpg)
Animal Classification Environment
Abilities
![Page 50: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/50.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, Run
![Page 51: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/51.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
![Page 52: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/52.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
![Page 53: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/53.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground Walk
![Page 54: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/54.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)
![Page 55: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/55.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)Mammal SaltWater Surface, Dive,
UnderwaterMammal SaltWater Surface, Dive,
Underwater
![Page 56: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/56.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)Mammal SaltWater Surface, Dive,
UnderwaterMammal SaltWater Surface, Dive,
UnderwaterBonyFish SaltWater Underwater, GlideBonyFish FreshWater Underwater
![Page 57: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/57.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)Mammal SaltWater Surface, Dive,
UnderwaterMammal SaltWater Surface, Dive,
UnderwaterBonyFish SaltWater Underwater, GlideBonyFish FreshWater Underwater
Bird Air, Ground Fly, WalkBird Air, Ground Fly
![Page 58: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/58.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)Mammal SaltWater Surface, Dive,
UnderwaterMammal SaltWater Surface, Dive,
UnderwaterBonyFish SaltWater Underwater, GlideBonyFish FreshWater Underwater
Bird Air, Ground Fly, WalkBird Air, Ground Fly
Mammal Ground Walk, Run, Glide
![Page 59: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/59.jpg)
Animal Classification Environment
Abilities
Mammal Ground Walk, RunMammal Ground Walk, Run
Bird Ground Walk, RunBird Ground Walk, Run
Reptile Ground WalkGastropod Ground Walk (?)Mammal SaltWater Surface, Dive,
UnderwaterMammal SaltWater Surface, Dive,
UnderwaterBonyFish SaltWater Underwater, GlideBonyFish FreshWater Underwater
Bird Air, Ground Fly, WalkBird Air, Ground Fly
Mammal Ground Walk, Run, GlideMammal Air, Ground Fly
![Page 60: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/60.jpg)
![Page 61: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/61.jpg)
![Page 62: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/62.jpg)
![Page 63: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/63.jpg)
![Page 64: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/64.jpg)
![Page 65: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/65.jpg)
![Page 66: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/66.jpg)
![Page 67: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/67.jpg)
![Page 68: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/68.jpg)
Doubledispatch
ability.Accept(visitor);
void Run.Accept(AbilityVisitor visitor){ visitor.Accept(this); // Accept(Run)}
![Page 69: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/69.jpg)
Watch the webinar recording here:
https://www.postsharp.net/blog/webinar-recording-object-composition
![Page 70: Applying Object Composition to Build Rich Domain Models](https://reader038.fdocuments.in/reader038/viewer/2022102918/58705d341a28aba2118b6e4f/html5/thumbnails/70.jpg)
Questions?
Zoran HorvatCEO & Principal Consultant, Coding Helmet Consultancy [email protected] http://codinghelmet.com zoranh75