+ All Categories
Home > Documents > SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I...

SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I...

Date post: 20-Apr-2020
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
44
SOLID Design Principles Jon Reid @qcoding
Transcript
Page 1: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

SOLID Design Principles

Jon Reid@qcoding

Page 2: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

SOLID

ingle Responsibility Principle

pen-Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

Page 3: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

SOLID

ingle Responsibility Principle

pen-Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

Principle

Page 4: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Principle:

• Idea you conform to

• Guidepost for behavior

• Gravity

• Axiom / Fundamental truth

• Religion

@qcoding

Page 5: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Dogma: But what’s it for?

• Religious/moral principles

• Dogma: “a principle or set of principles laid down by an authority as incontrovertibly true”

• “Good” vs. “Bad”

• “Good for ______”

• “Bad for ______”

• SOLID, huh! What is good for?

@qcoding

Page 6: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of when something was harder to change than expected:

• String parsing in Swift

• Design around Notch!

• Extensions?

• Libraries

• Breaking circular dependencies

@qcoding

Page 7: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Consequences of when something was harder to change than expected:

• Frustration

• Breakage

• Time

• Unexpected compromise

• Conflict

• Product canceled, entire team fired

@qcoding

Page 8: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

SOLID: Roots in Object Oriented Programming

But with Swift embracing Functional Programming…

@qcoding

Page 9: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

Object OrientedProgramming

@qcoding

Page 10: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

SOLID questions

• What is it good for?

• Is it still relevant for Swift?

@qcoding

Page 11: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

OLID

pen-Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

S ingle Responsibility Principle

Page 12: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

OLID

pen-Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

S ingle Responsibility Principle@qcoding

Page 13: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Open-Closed PrincipleA module should be open for extension, but closed for modification.

@qcoding

Page 14: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of OCP violations:

• Have to change the guts of a thing

• Server URL: Staging vs. production

• URL versioning

@qcoding

Page 15: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

OCP techniques:

• Delegates

• Protocols

• Strategy design pattern

• Configuration objects

• Dependency injection

• Subclass and override

• Blocks / Closures

@qcoding

Page 16: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Over-application

@qcoding

• Delegates

• Protocols

• Strategy design pattern

• Configuration objects

• Dependency injection

• Subclass and override

• Blocks / Closures

Page 17: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

Brain surgery is not necessary when putting on a hat.http://deviq.com/open-closed-principle/

Page 18: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Liskov Substitution PrincipleSubclasses should be substitutable for their base classes.

@qcoding

Page 19: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Liskov Substitution Principle

@qcoding

Rectangle

Square

Page 20: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of LSP violations:

• Single table inheritance & battling notifications

• Radio button: UIControl clear

• Sequences, collections

• NSMutableArray: NSArray

• All related to mutability

@qcoding

Page 21: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of LSP violations:

@qcoding

Page 22: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

LSP: Only applies to subclasses?

• I lied: It’s not subclassing, it’s sub-typing

• Implement a protocol

• “I’m going to implement this protocol, but leave these blank”

@qcoding

Page 23: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Liskov Substitution Principle: Semantic, not syntactic

@qcoding

Page 24: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

If it looks like a duck, quacks like a duck, but needs batteries —you probably have the wrong abstraction.

http://deviq.com/liskov-substitution-principle/

Page 25: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Interface Segregation PrincipleMany client-specific interfaces are better than one general-purpose interface.

@qcoding

Page 26: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Consequences of “fat” classes:

• Adaptability

• Mock ALL THE THINGS?

• Coupling too much stuffs

• Hard to read

• Hard to share

@qcoding

Page 27: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Fat classes affect build times

@qcoding

Page 28: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

DATA STRUCTURE SEGREGATION It matters, too!

@qcoding

Page 29: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding http://deviq.com/liskov-substitution-principle/

Tailor interfaces to individual clients’ needs.

Page 30: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Dependency Inversion PrincipleHigh-level modules should not depend on low-level modules.

@qcoding

Both should depend on abstractions.

Manager

Worker

Stuff DoerManager

Worker

Page 31: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of DIP violations:

• View talk directly to model

• Swift 2

• Storyboards

• CocoaPod

@qcoding

Page 32: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

High-impact DIP violation:

@qcoding

Parse Object

My Model

💀

Page 33: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Introducing an abstractionin the middle

@qcoding

Parse Object

My Parse Model

Persistent ModelMy Model

Page 34: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Routing dependencies:before

@qcoding

VC CVC BVC A

Page 35: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Routing dependencies:after

@qcoding

VC CVC BVC A

VC B Protocol

VC C Protocol

Page 36: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

Would you solder a lamp directly to the electrical source?http://deviq.com/dependency-inversion-principle/

Page 37: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Single Responsibility PrincipleA module should have one and only one reason to change.

@qcoding https://www.flickr.com/photos/ilopictures/35043310111/

Page 38: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of “technical”reasons to change

• Need to improve performance

• Swift

• New framework

• Testability

@qcoding

Page 39: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Examples of “business”reasons to change

• Requirements change

• Accessibility

• Analytics

• Localization

• Security vulnerabilities

@qcoding

Page 40: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

@qcoding

Avoid tightly coupling your tools together.http://deviq.com/single-responsibility-principle/

Page 41: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

WHAT IS SOLID FOR?Keep the end in mind.

@qcoding

Page 42: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

EVOLUTIONARY DESIGN:“Responding to change”

@qcoding

Page 43: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

SWIFT PROTOCOLS!A single language construct has many purposes.

@qcoding

Page 44: SOLID Design Principles - Quality CodingSOLID Design Principles Jon Reid @qcoding. @qcoding S O L I D ingle Responsibility Principle pen-Closed Principle iskov Substitution Principle

Slides and show notes:qualitycoding.org/talk/swiftxnw2017

Go make faster-buildingSOLID (but soft) Swift!


Recommended