Download - Who killed object oriented design?

Transcript
Page 1: Who killed object oriented design?

Who killedObject Oriented

Design?

Page 2: Who killed object oriented design?

Colonel PHPwith a lead pipe in

the study?

Page 3: Who killed object oriented design?

Just look around...

Page 4: Who killed object oriented design?

Is OOD making programming more

enjoyable?

Page 5: Who killed object oriented design?

How many abstract classes have you written lately?

Page 6: Who killed object oriented design?

When was the last time that you had a

design meeting?

Page 7: Who killed object oriented design?

Which one is your favorite LINQ expression?

Page 8: Who killed object oriented design?

Why would you use yield or yield

return?

Page 9: Who killed object oriented design?

Primitive Addiction

Page 10: Who killed object oriented design?

Be lazy

Page 11: Who killed object oriented design?

Make your life easier

Page 12: Who killed object oriented design?

Avoid repetition

Page 13: Who killed object oriented design?

Use the source Luke

Page 14: Who killed object oriented design?

Creating dates is painful?

Page 15: Who killed object oriented design?

DateTime.Parse("...")

Page 16: Who killed object oriented design?

new DateTime(y, m, d)

Page 17: Who killed object oriented design?

On.Jan(1)

On.Aug(3, 2013)

Page 18: Who killed object oriented design?

Date arithmetic makes you crazy?

Page 19: Who killed object oriented design?

DateTime.Today.AddDays(-3)

Page 20: Who killed object oriented design?

3.Days().Ago

Page 21: Who killed object oriented design?

5.Days().Span

Page 22: Who killed object oriented design?

1.Month().Ago + 5.Days().Span

Page 23: Who killed object oriented design?

On.Dec(10) - 2.Months().Span

Page 24: Who killed object oriented design?

2.Months().Before(On.Dec(10))

Page 25: Who killed object oriented design?

Date from and to in every method?

Page 26: Who killed object oriented design?

What’s missing?

Page 27: Who killed object oriented design?

Use a DateRange

Page 28: Who killed object oriented design?

new DateRange(!!!!!!On.Jul(1),!!!!!!1.Month().Span)

Page 29: Who killed object oriented design?

public class DateRange:!!!!!IEnumerable<DateTime>

Page 30: Who killed object oriented design?

var r = new DateRange(!!!!!!!!!!!!!!On.Jul(1), !!!!!!!!!!!!!!On.Sep(3)) r.Select(d => ....)

Page 31: Who killed object oriented design?

Generates a sequence of dates

Page 32: Who killed object oriented design?

public IEnumerator<DateTime> GetEnumerator() { var counter = this.StartDate;

while (counter <= this.EndDate) { yield return counter; counter = counter.AddDays(1); } }

Page 33: Who killed object oriented design?

Anemic models

Page 34: Who killed object oriented design?

OO mixes behavior and data

Page 35: Who killed object oriented design?

Models usually represent data

Page 36: Who killed object oriented design?

...and you realize that there is hardly any behavior on these objects, making them little more than bags of getters and setters...

Martin Fowler

Page 37: Who killed object oriented design?

Rich vs Anemic

Page 38: Who killed object oriented design?

What about SOLID?

Page 39: Who killed object oriented design?

Can we justify more classes?

Page 40: Who killed object oriented design?

ValidatorsProcessorsRetrieversTranslators

ServicesBuilders

Page 41: Who killed object oriented design?

class WorkingShift { public Code { get; set; } public Desc { get; set; }}

Page 42: Who killed object oriented design?

Night, day or evening...Who’s responsible?

Page 43: Who killed object oriented design?

shift.Code == "NIGHT"

Page 44: Who killed object oriented design?

class WorkingShift { public Code { get; set; } public Desc { get; set; } public bool IsNight() { ... }}

Page 45: Who killed object oriented design?

class Customer { public IsOfDrivingAge { get; } }

Page 46: Who killed object oriented design?

How to decide?

Page 47: Who killed object oriented design?

Functionality is Complex

Page 48: Who killed object oriented design?

Functionality uses multiple models

Page 49: Who killed object oriented design?

Interacting with external service

Page 50: Who killed object oriented design?

Is not a core concern

Page 51: Who killed object oriented design?

Multiple ways of implementation

Page 52: Who killed object oriented design?

Some options

Page 53: Who killed object oriented design?

Use extensions

Page 54: Who killed object oriented design?

public static class CustomerExtensions{ public static bool ! ! ! ! IsOfDrivingAge(this Customer ...) }

Page 55: Who killed object oriented design?

Decorator

Page 56: Who killed object oriented design?

View Model

Page 57: Who killed object oriented design?

Service Objects

Page 58: Who killed object oriented design?

Form Objects

Page 59: Who killed object oriented design?

Repository overpopulation

Page 60: Who killed object oriented design?

Media tes be tween the domain and data mapping layers using a collection-like interface for accessing domain objects

Martin Fowler

Page 61: Who killed object oriented design?

public interface IRepository<T>{ IEnumerable<T> All(); void Insert(T entity); void Delete(T entity);}

Page 62: Who killed object oriented design?

Custom queries

Page 63: Who killed object oriented design?

class CustomerRepository:! ! ! IRepository<Customer>{ // Implementation interface IEnumerable<Customer> FindByAddr(Address ) }

Page 64: Who killed object oriented design?

CustomerRepositoryAddressRepositoryChairRepository

...

Page 65: Who killed object oriented design?

IQueryable<T>

Page 66: Who killed object oriented design?

public interface IRepository<T>{ IQueryable<T> All(); void Insert(T entity); void Delete(T entity);}

Page 67: Who killed object oriented design?

class CustomerExtensions{ public IQueryable<Customer> FindByAddress( this IQueryable<Customer> query, Address address) { query.Where(c => c.Address == address) } }

Page 68: Who killed object oriented design?

How many repositories?

Page 69: Who killed object oriented design?

Only one generic implementation on top of your favorite ORM

Page 70: Who killed object oriented design?

IOC container can instantiate the right one

Page 71: Who killed object oriented design?

UnitOfWork can be a factory of

repositories

Page 72: Who killed object oriented design?

Having an ORM do we really need a repository?

Page 73: Who killed object oriented design?

Testing the testable test is

tested

Page 74: Who killed object oriented design?

A test is about behavior

Page 75: Who killed object oriented design?

Not implementation

Page 76: Who killed object oriented design?

Writing expectations about implementation

makes it brittle

Page 77: Who killed object oriented design?

public int ImportantMethod(){ var c1 = _dependency1.Calculate(); var c2 = _dependency2.Adjust(c1); return c2 + 10;}

Page 78: Who killed object oriented design?

public void ImportantTest() { // arrange .... _dependency1! ! ! .Expect(d => d.Calculate())! ! ! .Once()! ! ! .AndReturn(50) _dependency2! ! ! .Expect(d => d.Adjust(50))! ! ! .Once()! ! ! .AndReturn(100) // act var actual = sut.ImportantMethod() // assert Assert.That(actual, Is.EqualTo(110))! VerifyAllExpectations()}

Page 79: Who killed object oriented design?

public int ImportantMethod(){ var c1 = _dependency1.Calculate(); var c2 = _dependency2.Adjust(c1); return _dependency2.Adjust(c1) + 10;}

Page 80: Who killed object oriented design?

public void ImportantTest() { // arrange .... _dependency1! ! ! ! .Stub(d => d.Calculate())! ! ! ! .AndReturn(50) _dependency2! ! ! ! .Stub(d => d.Adjust(50))! ! ! ! .AndReturn(100) // act var actual = sut.ImportantMethod() // assert Assert.That(actual, Is.EqualTo(110))}

Page 81: Who killed object oriented design?

Abstraction subtraction

Page 82: Who killed object oriented design?

Exercise in groups

Page 83: Who killed object oriented design?

Hospital Domain Model

Page 84: Who killed object oriented design?

Versions

Page 85: Who killed object oriented design?

What the domain looked like

X months ago

Page 86: Who killed object oriented design?

DB Driven Development

Page 87: Who killed object oriented design?

Model may or may not match the database

Page 88: Who killed object oriented design?

Active Record

Page 89: Who killed object oriented design?

Transaction Script

Page 90: Who killed object oriented design?

Data Mapper

Page 91: Who killed object oriented design?

Coding is likeTelling a Story

Page 92: Who killed object oriented design?

Leave the code cleaner than you found it

Page 93: Who killed object oriented design?

Meaning is KING

Page 94: Who killed object oriented design?

Don’t code what you don’t need

Page 95: Who killed object oriented design?

Know your collections

Page 96: Who killed object oriented design?

Let LINQ do the work for you

Page 97: Who killed object oriented design?

Use extension methods to mimic a DSL

Page 98: Who killed object oriented design?

Discuss design options

Page 99: Who killed object oriented design?

Explore F#

Page 100: Who killed object oriented design?

Thank you!

Page 101: Who killed object oriented design?

The Smartest tool for lean project management

http://smartviewapp.com

Page 102: Who killed object oriented design?

[email protected]

@abarylko

http://bit.ly/abarylkoslides

Page 103: Who killed object oriented design?

Photo Credit

• Under http://creativecommons.org/licenses/by/2.5/

• Joe Cheng, DSC_7820-01, http://flic.kr/p/2Zt2u

• Bill Ward, Derek Schin's Trucks 1, http://flic.kr/p/m5L5S

• Jeremy Keith, Roast beef, http://flic.kr/p/TKUz

• Rob Campbell, Field of daisies, http://flic.kr/p/6QJjU4

• Karin Dalziel, The Thinker, http://flic.kr/p/4UYArc

Page 104: Who killed object oriented design?

Photo Credit 2• Under https://creativecommons.org/licenses/by-sa/2.0/

• Don LaVange, To Irene, https://flic.kr/p/49ihZX

• Under http://creativecommons.org/licenses/by-sa/3.0/us/

• Derick Bailey, SOLID Motivational Posters, http://bit.ly/17aVaHg

• MGA Roadster 1600 in Chariot Red: http://www.carandclassic.co.uk/car/C414652

• Cone of Uncertainty, http://www.agilenutshell.com/cone_of_uncertainty

• Burning Money, http://en.wikipedia.org/wiki/Money_burning#mediaviewer/File:Burning-money-and-yuanbao-at-the-cemetery-3249.JPG