Slide 1

Slide 1 text

Why Every Single Element of SOLID is Wrong! Dan North @tastapod

Slide 2

Slide 2 text

Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Inversion

Slide 3

Slide 3 text

Single Responsibility Principle “one reason to change” “only do one thing”

Slide 4

Slide 4 text

Single Responsibility Principle What is a single responsibility anyway? ETL: three responsibilities or one? How can you predict what is going to change? Pointlessly Vague Principle

Slide 5

Slide 5 text

Single Responsibility Principle Simple code is easy to reason about Can easily do several related things Refactor until it Fits In Your Head Write simple code

Slide 6

Slide 6 text

Open-Closed Principle Open for extension, closed for modification “When requirements change,
 extend behaviour by adding new code,
 not changing code that works”

Slide 7

Slide 7 text

Open-Closed Principle Open for extension, closed for modification “When requirements change,
 the existing code is now wrong!
 so replace it with code that works” Cruft Accretion Principle

Slide 8

Slide 8 text

Open-Closed Principle Simple code is easy to change Simple code is easy to test Simple code is both open and closed Write simple code!

Slide 9

Slide 9 text

Liskov Substitution Principle “Strong behavioural subtyping” Substitution with a subtype preserves all
 “desirable properties” of the original type “Provably undecidable” but useful

Slide 10

Slide 10 text

Liskov Substitution Principle “There is nothing quite so useless, as doing with great efficiency, something that should not be done at all.” Stuck in is-a and has-a modelling mindset Drucker’s Warning Principle

Slide 11

Slide 11 text

Liskov Substitution Principle What about acts-like-a, can-be-used-as-a? Composition is simpler than inheritance Try to avoid object hierarchies altogether Write simple code!

Slide 12

Slide 12 text

Interface Segregation Principle Many small interfaces are better than one big object Design small, role-based interfaces No client depends on methods it doesn’t use

Slide 13

Slide 13 text

Interface Segregation Principle Practically anything is better than one big object Design small, role-based classes No client depends on methods it doesn’t use Stable Door Principle This is already true!! —>

Slide 14

Slide 14 text

Interface Segregation Principle Don’t write big objects in the first place! Write code that Fits In Your Head If a class needs lots of interfaces, simplify the class! Write simple code!

Slide 15

Slide 15 text

Dependency Inversion Principle High-level modules should not depend on
 lower-level modules Abstractions (e.g. interfaces) should not depend on
 details (e.g. concrete implementations)

Slide 16

Slide 16 text

Dependency Inversion Principle Reuse is overrated, design for use! DIP leads to a different kind of dependency,
 dependency on DI frameworks! Wrong Goal Principle

Slide 17

Slide 17 text

Dependency Inversion Principle See how far you get combining simple classes new is the new new! Assemble into small components that Fit In Your Head Write simple code!

Slide 18

Slide 18 text

Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Inversion

Slide 19

Slide 19 text

Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Inversion Too much to remember!

Slide 20

Slide 20 text

Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Inversion Write simple code!