Single Responsibility Principle - XPeppers Tech Talks
-
Upload
gabriele-tondi -
Category
Software
-
view
88 -
download
0
Transcript of Single Responsibility Principle - XPeppers Tech Talks
![Page 1: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/1.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/3.jpg)
Single Responsibility Principle
25-09-2014
What is a reason?
![Page 4: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/5.jpg)
Single Responsibility Principle
25-09-2014
Users can wear different hats
} } }DBA CEO OPS
![Page 6: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/6.jpg)
Single Responsibility Principle
25-09-2014
… and sometimes more than one!
} }DBA
}
CEOOPS
![Page 7: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/7.jpg)
Single Responsibility Principle
25-09-2014
… and of course they like to change
} }DBA }
CEO
OPS
![Page 8: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/11.jpg)
Single Responsibility Principle
25-09-2014
Fragilityhttps://www.flickr.com/photos/darcymoore/8366125743
![Page 12: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/12.jpg)
Single Responsibility Principle
25-09-2014
Rigidityhttps://www.flickr.com/photos/gravlax/4971359205
![Page 13: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/13.jpg)
Single Responsibility Principle
25-09-2014
We should fix it!
![Page 14: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/15.jpg)
Single Responsibility Principle
25-09-2014
Effects
• more focused classes • easier to name
![Page 16: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/16.jpg)
Single Responsibility Principle
25-09-2014
But
We have also increased complexity
![Page 17: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/17.jpg)
Single Responsibility Principle
25-09-2014
Tradeoffs
![Page 18: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/18.jpg)
Single Responsibility Principle
25-09-2014
Questions?
![Page 19: Single Responsibility Principle - XPeppers Tech Talks](https://reader033.fdocuments.net/reader033/viewer/2022042716/55a522151a28abba348b47f2/html5/thumbnails/19.jpg)
Single Responsibility Principle
25-09-2014
Thank you!