19
Single Responsibility Principle 25-09-2014 Single Responsibility Principle Open Clone Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle

Single Responsibility Principle - XPeppers Tech Talks

Embed Size (px)

Citation preview

Page 1: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Single Responsibility Principle Open Clone Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle

Page 2: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

“A module should have only one reason to change”Robert C. Martin

Page 3: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

What is a reason?

Page 4: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Software is about people

Software respond to different user needs

Respond to a user need is a responsibility

Page 5: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Users can wear different hats

} } }DBA CEO OPS

Page 6: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

… and sometimes more than one!

} }DBA

}

CEOOPS

Page 7: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

… and of course they like to change

} }DBA }

CEO

OPS

Page 8: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

So we should not bind our software on peoples

Instead we consider the role they play (CEO, OPS, DBA, ecc)

Page 9: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Example

Invoice

+ calculateSum() + store() + print()

Who this class respond to?

How many responsibilities has?

Page 10: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Invoice

+ calculateSum() + store() + print()

Policy

DBA

OPS

This class has 3 responsibilities because respond to 3 different roles

Page 11: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Fragilityhttps://www.flickr.com/photos/darcymoore/8366125743

Page 12: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Rigidityhttps://www.flickr.com/photos/gravlax/4971359205

Page 13: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

We should fix it!

Page 14: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Extract Class

Invoice

+ calculateSum()

InvoiceRepository

+ store()

InvoiceReportBuilder

+ print()

Policy DBA OPS

Page 15: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Effects

• more focused classes • easier to name

Page 16: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

But

We have also increased complexity

Page 17: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Tradeoffs

Page 18: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Questions?

Page 19: Single Responsibility Principle - XPeppers Tech Talks

Single Responsibility Principle

25-09-2014

Thank you!