What is SOLID The S in SOLID The O in SOLID The L in SOLID The I in SOLID The D in SOLID ...

24
SOLID

Transcript of What is SOLID The S in SOLID The O in SOLID The L in SOLID The I in SOLID The D in SOLID ...

Page 1: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

SOLID

Page 2: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WHAT’S HE GONNA TALK ABOUT

What is SOLID The S in SOLID The O in SOLID The L in SOLID The I in SOLID The D in SOLID Questions

Page 3: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WHAT’S THIS SOLID BUSINESS

SOLID Principles

Object-Oriented Design

En

cap

su

lati

on

Inh

eri

tan

ce

Poly

morp

his

m

Page 4: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WHAT’S THIS SOLID BUSINESS

A means to avoid technical debt Decrease Coupling Increase Cohesion

Maintainable Extensible Testable

Page 5: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WHAT’S THIS SOLID BUSINESS

Guidelines, NOT LAWS

You got to know when to hold’em, know when to fold’em,

Know when to walk away and know when to run.-Kenny Rogers

Page 6: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

THE REQUEST 1

Application

Flat File

EmailSender•SendEmail•GetMessage

Page 7: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

Single Responsibility Principle

SRP

There should never be more than one reason for a class to change

-Uncle Bob

Page 8: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

SINGLE RESPONSIBILITY PRINCIPLE

VIOLATES THE PRINCIPLE ABIDES BY THE PRINCIPLE

Application

Flat File

EmailSender•SendEmail•GetMessage

Application

Flat File

FileReader•GetMessage

EmailSender•SendEmail

Page 9: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

A REQUEST 2

Application

Flat File

FileReader•GetMessage

EmailSender•SendEmail

XML File

Page 10: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

Open-Close Principle

OCP

Software entities (classes, modules, functions, etc…) should be open for extension, but closed for modification

-Uncle Bob

Page 11: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

OPEN-CLOSED PRINCIPLE

VIOLATES THE PRINCIPLE ABIDES BY THE PRINCIPLE

Application

Flat File

FileReader

•GetMessage

EmailSender

•SendEmail

XML File

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Page 12: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

REQUEST 3Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

DB File

DbFileReader

•CanRead•ReadFile

Database

Page 13: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

Liskov Substitution Principle

LSP

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it

-Uncle Bob

Page 14: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

LISKOV SUBSTITUTION PRINCIPLE

VIOLATES THE PRINCIPLE ABIDES BY THE PRINCIPLE

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

DB File

DbFileReader

•CanRead•ReadFile

Database

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

DbReader

•GetMessage

Database

Page 15: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

REQUEST 4Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Database

IReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

DbReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Page 16: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

Interface Segregation Principle

ISP

Clients should not be forced to depend upon interfaces that they do not use

-Uncle Bob

Page 17: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

INTERFACE SEGREGATION PRINCIPLE

ABIDES BY THE PRINCIPLE

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

EmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Database

IReader

•GetMessage

DbReader

•GetMessage

IFileTypeReaderRegisterable

•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Page 18: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

Dependency Inversion Principle

DIP

High level modules should not depend upon low level modules. Both should depend upon abstractions

Abstractions should not depend upon details. Details should depend upon abstractions

-Uncle Bob

Page 19: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

DEPENDENCY INVERSION PRINCIPLE

ABIDES BY THE PRINCIPLE

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

IEmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Database

IReader

•GetMessage

DbReader

•GetMessage

IFileTypeReaderRegisterable

•RegisterDefaultFileTypeReader•RegisterFileTypeReader

EmailSender

•SendEmail

Page 20: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WITHOUT SOLID

Application

Flat File

EmailSender•SendEmail•GetMessage

Xml File

Database

Page 21: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

WITH SOLID

Application

Flat File

BaseFileTypeReader

•CanRead•ReadFile

IEmailSender

•SendEmail

XML File

FlatFileReader

•CanRead•ReadFile

XmlFileReader

•CanRead•ReadFile

FileReader

•GetMessage•RegisterDefaultFileTypeReader•RegisterFileTypeReader

Database

IReader

•GetMessage

DbReader

•GetMessage

IFileTypeReaderRegisterable

•RegisterDefaultFileTypeReader•RegisterFileTypeReader

EmailSender

•SendEmail

Page 22: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

QUESTIONS?

Page 23: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

REFERENCE LINKS

Martin Folwer – Technical Debt http://www.martinfowler.com/bliki/TechnicalDebt.html

Wikipedia – Coupling http://en.wikipedia.org/wiki/Coupling_(computer_programmi

ng) Wikipedia – Cohesion

http://en.wikipedia.org/wiki/Cohesion_(computer_science) Robert Martin – The Principles of OOD

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod Derick Bailey – SOLID Principles – Step by step code

https://github.com/derickbailey/presentations-and-training/tree/master/SOLID%20Principles%20-%20Step%20By%20Step%20Code

Page 24: What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.

MY INFORMATION

Email – [email protected] Twitter – @tonycwang LinkedIn –

www.linkedin.com/in/tonycwang