View
88
Download
0
Category
Preview:
Citation preview
Single Responsibility Principle
25-09-2014
Single Responsibility Principle Open Clone Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle
Single Responsibility Principle
25-09-2014
“A module should have only one reason to change”Robert C. Martin
Single Responsibility Principle
25-09-2014
What is a reason?
Single Responsibility Principle
25-09-2014
Software is about people
Software respond to different user needs
Respond to a user need is a responsibility
Single Responsibility Principle
25-09-2014
Users can wear different hats
} } }DBA CEO OPS
Single Responsibility Principle
25-09-2014
… and sometimes more than one!
} }DBA
}
CEOOPS
Single Responsibility Principle
25-09-2014
… and of course they like to change
} }DBA }
CEO
OPS
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)
Single Responsibility Principle
25-09-2014
Example
Invoice
+ calculateSum() + store() + print()
Who this class respond to?
How many responsibilities has?
Single Responsibility Principle
25-09-2014
Invoice
+ calculateSum() + store() + print()
Policy
DBA
OPS
This class has 3 responsibilities because respond to 3 different roles
Single Responsibility Principle
25-09-2014
Fragilityhttps://www.flickr.com/photos/darcymoore/8366125743
Single Responsibility Principle
25-09-2014
Rigidityhttps://www.flickr.com/photos/gravlax/4971359205
Single Responsibility Principle
25-09-2014
We should fix it!
Single Responsibility Principle
25-09-2014
Extract Class
Invoice
+ calculateSum()
InvoiceRepository
+ store()
InvoiceReportBuilder
+ print()
Policy DBA OPS
Single Responsibility Principle
25-09-2014
Effects
• more focused classes • easier to name
Single Responsibility Principle
25-09-2014
But
We have also increased complexity
Single Responsibility Principle
25-09-2014
Tradeoffs
Single Responsibility Principle
25-09-2014
Questions?
Single Responsibility Principle
25-09-2014
Thank you!
Recommended