solid principles

71
Agile Object Oriented Design SOLID principles [email protected]

Upload: dmitry-kandalov

Post on 25-Jun-2015

2.968 views

Category:

Technology


2 download

DESCRIPTION

Slides from presentation at agiledays09.

TRANSCRIPT

Page 1: SOLID principles

Agile Object Oriented Design

SOLID principles

[email protected]

Page 2: SOLID principles

Why it is Agile?

Page 3: SOLID principles
Page 4: SOLID principles
Page 5: SOLID principles
Page 6: SOLID principles

?

Page 7: SOLID principles
Page 8: SOLID principles

principles != rules

Page 9: SOLID principles

Single Responsibility

Principle

Page 10: SOLID principles

Problem domain

Conceptual model

Implementation

Page 11: SOLID principles

Problem domain

Conceptual model

Implementation

?

?

Page 12: SOLID principles
Page 13: SOLID principles

NOooo!!

Page 14: SOLID principles

Book

InstrumentPositionvalue: double

1

*1 1

Page 15: SOLID principles

Book PositionListener 1

BookPosNode

Book PositionListener 2

NetworkApplication

position

position

position

Page 16: SOLID principles

BookPosNode

AbstractBookPosNode

Subscriber

SnapshotProvider

HeartbeatMonitor

StateMachine

Page 17: SOLID principles

1

Page 18: SOLID principles

2

Page 19: SOLID principles

3

Page 20: SOLID principles

4

the rest of the class is collapsed

Page 21: SOLID principles

5

the rest of the class is collapsed

Page 22: SOLID principles

Open/Closed Principle

Page 23: SOLID principles

AbstractPositionNode

BookPosNode

Client

Page 24: SOLID principles

AbstractPositionNode

BookPosNode JMSNode

Client PositionWatcher

Add

Change

Page 25: SOLID principles

AbstractPositionNode

BookPosNode JMSNode

Client PositionWatcher

Add

NodeV2

Page 26: SOLID principles

Front-end

Back-end

Database

Change

Page 27: SOLID principles

Liskov Substitution Principle

Page 28: SOLID principles
Page 29: SOLID principles
Page 30: SOLID principles
Page 31: SOLID principles

Ellipse-circle problem

rectangle-square

Page 32: SOLID principles

Point

x, y : int

#equals()#hashCode()

Page 33: SOLID principles

Point

x, y : int

#equals()#hashCode()

ColorPoint

color : Color

#equals()#hashCode()

Page 34: SOLID principles

Point

x, y : int

#equals()#hashCode()

ColorPoint

color : Color

#equals()#hashCode()

Can't extend like this preserving equals contract

(Effective Java, Item 8)

Page 35: SOLID principles

@IViolateLSP

Page 36: SOLID principles

class Dog implements ICanBark …

class Button implements IClickable …

Page 37: SOLID principles

Interface Segregation Principle

Page 38: SOLID principles

<<interface>>

BigService

Client1 Client2 Client3

Page 39: SOLID principles

<<interface>>

BigService

<<interface>>

Service1<<interface>>

Service2<<interface>>

Service3

Client1 Client2 Client3

Page 40: SOLID principles
Page 41: SOLID principles

BookPositionNode

<<interface>>

ResubscribingNode AbsPosNode

StateMachine

Client

uses

uses

Page 42: SOLID principles

Dependency Inversion Principle

Page 43: SOLID principles

Client

Service

client

service

Page 44: SOLID principles

Client

<<interface>>

ServiceServiceImpl

client

service

Page 45: SOLID principles

client

service

Page 46: SOLID principles

Client

<<interface>>

ServiceServiceImpl

client

service

Page 47: SOLID principles

Client<<interface>>

Service

ServiceImpl

client

service

Page 48: SOLID principles

client

service

Page 49: SOLID principles

Client<<interface>>

Service

ServiceImpl

client

service

api

Page 50: SOLID principles
Page 51: SOLID principles

SRP

OCP

LSP

ISP

DIP

Page 52: SOLID principles

Single Responsibility

Principle

Page 53: SOLID principles

Open/Closed Principle

Page 54: SOLID principles

Liskov Substitution Principle

Page 55: SOLID principles

Interface Segregation Principle

Page 56: SOLID principles

Dependency Inversion Principle

Page 57: SOLID principles

What else?

Page 58: SOLID principles

Problem domain

Conceptual model

Implementation

Page 59: SOLID principles

F**k Design

Page 60: SOLID principles

Zen Coding

Page 61: SOLID principles
Page 62: SOLID principles

and only then for computers

Code is written for

people

Page 63: SOLID principles

REP

CRP

CCP

ADP

SDP

SAP

Page 64: SOLID principles

UML,

patterns,

and more...

Page 65: SOLID principles
Page 66: SOLID principles

Thanks!

Page 67: SOLID principles

SRP

OCP

LSP

ISP

DIP

Page 68: SOLID principles

http://weblogs.java.net/blog/82/2003/09/02/aristotles-error-or-agile-smagile

http://blog.objectmentor.com/articles/2009/01/31/quality-doesnt-matter-that-much-jeff-and-joel

http://www.codinghorror.com/blog/archives/000805.htmlhttp://www.youtube.com/watch?v=2k1uOqRb0HU

http://blogs.msdn.com/brada/archive/2003/10/02/50420.aspx

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

http://www.joelonsoftware.com/items/2009/09/23.html

Page 69: SOLID principles
Page 70: SOLID principles
Page 71: SOLID principles