applying object composition to build rich domain models

70
Applying Object Composition to Build Rich Domain Models Horvat Principal Consultant, Coding Helmet Consultancy [email protected] http://codinghelmet.com zoranh75

Upload: postsharp-technologies

Post on 16-Apr-2017

348 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Applying Object Composition to Build Rich Domain Models

Applying Object Composition to Build Rich Domain Models

Zoran HorvatCEO & Principal Consultant, Coding Helmet Consultancy [email protected] http://codinghelmet.com zoranh75

Page 2: Applying Object Composition to Build Rich Domain Models

https://pluralsight.com/authors/zoran-horvat

[email protected] http://codinghelmet.com zoranh75

Page 4: Applying Object Composition to Build Rich Domain Models
Page 5: Applying Object Composition to Build Rich Domain Models
Page 6: Applying Object Composition to Build Rich Domain Models
Page 7: Applying Object Composition to Build Rich Domain Models
Page 8: Applying Object Composition to Build Rich Domain Models
Page 9: Applying Object Composition to Build Rich Domain Models
Page 10: Applying Object Composition to Build Rich Domain Models
Page 11: Applying Object Composition to Build Rich Domain Models
Page 12: Applying Object Composition to Build Rich Domain Models
Page 13: Applying Object Composition to Build Rich Domain Models
Page 14: Applying Object Composition to Build Rich Domain Models

Animal obj = ...

Page 15: Applying Object Composition to Build Rich Domain Models

Animal obj = ...if (obj is Mammal){}

Page 16: Applying Object Composition to Build Rich Domain Models

Animal obj = ...if (obj is Mammal){ Mammal mammal = (Mammal)obj; // e.g. a tiger}

Page 17: Applying Object Composition to Build Rich Domain Models

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

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

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
Page 21: Applying Object Composition to Build Rich Domain Models
Page 22: Applying Object Composition to Build Rich Domain Models

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

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

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

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

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
Page 28: Applying Object Composition to Build Rich Domain Models
Page 29: Applying Object Composition to Build Rich Domain Models
Page 30: Applying Object Composition to Build Rich Domain Models
Page 31: Applying Object Composition to Build Rich Domain Models
Page 32: Applying Object Composition to Build Rich Domain Models
Page 33: Applying Object Composition to Build Rich Domain Models
Page 34: Applying Object Composition to Build Rich Domain Models
Page 35: Applying Object Composition to Build Rich Domain Models
Page 36: Applying Object Composition to Build Rich Domain Models
Page 37: Applying Object Composition to Build Rich Domain Models
Page 39: Applying Object Composition to Build Rich Domain Models
Page 40: Applying Object Composition to Build Rich Domain Models
Page 41: Applying Object Composition to Build Rich Domain Models
Page 42: Applying Object Composition to Build Rich Domain Models
Page 43: Applying Object Composition to Build Rich Domain Models
Page 44: Applying Object Composition to Build Rich Domain Models
Page 45: Applying Object Composition to Build Rich Domain Models
Page 46: Applying Object Composition to Build Rich Domain Models
Page 47: Applying Object Composition to Build Rich Domain Models
Page 49: Applying Object Composition to Build Rich Domain Models

Animal Classification Environment

Abilities

Page 50: Applying Object Composition to Build Rich Domain Models

Animal Classification Environment

Abilities

Mammal Ground Walk, Run

Page 51: Applying Object Composition to Build Rich Domain Models

Animal Classification Environment

Abilities

Mammal Ground Walk, RunMammal Ground Walk, Run

Page 52: Applying Object Composition to Build Rich Domain Models

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

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

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

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

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

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

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

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
Page 61: Applying Object Composition to Build Rich Domain Models
Page 62: Applying Object Composition to Build Rich Domain Models
Page 63: Applying Object Composition to Build Rich Domain Models
Page 64: Applying Object Composition to Build Rich Domain Models
Page 65: Applying Object Composition to Build Rich Domain Models
Page 66: Applying Object Composition to Build Rich Domain Models
Page 67: Applying Object Composition to Build Rich Domain Models
Page 68: Applying Object Composition to Build Rich Domain Models

Doubledispatch

ability.Accept(visitor);

void Run.Accept(AbilityVisitor visitor){ visitor.Accept(this); // Accept(Run)}

Page 70: Applying Object Composition to Build Rich Domain Models

Questions?

Zoran HorvatCEO & Principal Consultant, Coding Helmet Consultancy [email protected] http://codinghelmet.com zoranh75