express yourself! -...

18
Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~ [email protected]

Upload: others

Post on 01-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Express Yourself!Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~ [email protected]

Page 2: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

“You’ll never know less than you know right now”

– Kent Beck

Page 3: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

htt

ps://

ww

w.f

lick

r.co

m/p

hot

os/q

uin

nan

ya/5

9068

7501

5

Page 4: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~
Page 5: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

htt

ps://

ww

w.r

ed-g

ate.

com

/ass

ets/

purc

has

e/as

sets

/li

cen

se.p

df

Page 6: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~
Page 7: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

The Four Rules of Simple Design1. Tests Pass

2. Expresses Intent

3. No Duplication (DRY)

4. Small

Page 8: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~
Page 9: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Improving your testsTest names should influence your API design

Root out subtle duplication

Page 10: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Test names influence API designpublic void A_New_Carriage_Is_Empty(){ Assert.That(new Carriage().Passengers.Count == 0);}

public void A_Seat_Can_Be_Assigned(){ var carriage = new Carriage();

carriage.AssignSeat(34);

Assert.That(carriage.AssignedSeats == 1);}

public void A_New_Carriage_Is_Empty(){ Assert.That(new Carriage().IsEmpty() == true);}

public void A_Seat_Can_Be_Assigned(){ var carriage = new Carriage();

carriage.AssignSeat(34);

Assert.That(carriage.IsSeatAssigned(34) == true);}

public void After_Assigning_A_Seat_The_Carriage_Is_Not_Empty(){ var carriage = new Carriage();

carriage.AssignSeat(34);

Assert.That(carriage.IsEmpty() == false);}

Page 11: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Root out subtle duplicationpublic void A_Seat_Can_Be_Assigned(){ var carriage = new Carriage();

carriage.AssignSeat(34);

Assert.That(carriage.IsSeatAssigned(34) == true);}

public void A_Seat_Can_Be_Assigned(){ var carriage = new Carriage(); var seat = Seat.Number(34);

carriage.Assign(seat);

Assert.That(carriage.IsAssigned(seat) == true);}

Page 12: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Improving your objectsAvoid procedural polymorphism

Invert composition to break inheritance

Page 13: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Avoid procedural polymorphismpublic class Carriage{ public bool IsAcceptingReservations() { if (Empty) { return IsOpenForBookings(); } else { return HasSpacesRemaining(); } }}

public class EmptyCarriage : Carriage{ public override bool IsAcceptingReservations() { return IsOpenForBookings(); }}

public class Carriage{ public virtual bool IsAcceptingReservations() { return HasSpacesRemaining(); }}

Page 14: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~
Page 15: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Invert compositionpublic class StandardCarriage{ public Seat Seat { get; }}

public class FirstClassCarriage{ public Seat Seat { get; }}

public class Carriage{ public Seat Seat { get; }}

public class StandardCarriage : Carriage{}

public class FirstClassCarriage : Carriage{}

public interface IHaveASeat{ Seat Seat { get; }}

public class StandardCarriage : IHaveASeat{}

public class FirstClassCarriage : IHaveASeat{}

public class Seat{ public int Number { get; } public Carriage Carriage { get; }}

public class StandardCarriage : Carriage{}

public class FirstClassCarriage : Carriage{}

Concretion

Dependency

Abstraction

Page 16: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~
Page 17: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

“You’ll never know less than you know right now”

– Kent Beck

Page 18: Express Yourself! - itakeunconf.comitakeunconf.com/wp-content/uploads/2016/05/Express-Yourself.pdf · Express Yourself! Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~

Express Yourself!Alastair Smith ~ I T.A.K.E. Unconference 2016 @alastairs ~ [email protected]