Establishing a SOLID Foundation

Cameron Presley
Cameron PresleySoftware Engineer at SentryOne
Cameron Presley
@pcameronpresley
Cameron@TheSoftwareMentor.com
Establishing a SOLID Foundation
An Intro to Software Design
Slides can be found at:
http://blog.TheSoftwareMentor.com/Presentations/#SOLID
@pcameronpresley 2
@pcameronpresley 3
@pcameronpresley
Mnemonic for a set of principles
that allows us to write easier to
maintain code
Concepts aren’t new (late 80’s)
Introduced by Robert C. Martin in
Agile Principles, Patterns, and
Practices
4
@pcameronpresley
Single Responsibility
Open/Closed
Liskov Substitution
Interface Segregation
Dependency Inversion
5
@pcameronpresley
Doing
Too Much!
6
Bad
Abstractions
@pcameronpresley 7
@pcameronpresley 8
@pcameronpresley 9
@pcameronpresley 10
@pcameronpresley 11
@pcameronpresley 12
@pcameronpresley 13
@pcameronpresley 14
@pcameronpresley 15
@pcameronpresley 16
@pcameronpresley 17
@pcameronpresley
A class should have
one reason to change
18
@pcameronpresley 19
@pcameronpresley
Classes can be measured
in hundreds (or thousands)
of LOCs
20
@pcameronpresley
27 public methods
21
@pcameronpresley
Single public method with
54 private methods
22
@pcameronpresley 23
@pcameronpresley 24
@pcameronpresley 25
1. Break large methods
down to smaller methods
2. Move private methods to
new classes
3. Instantiate/use new
classes
@pcameronpresley 26
@pcameronpresley
Classes should depend upon
abstractions
Classes shouldn’t be responsible
for creating their own
dependencies
27
@pcameronpresley 28
@pcameronpresley
Only way to change dependencies is to
change the class
Impossible to write unit tests that cross
system boundaries
Provides another way to determine if a class
is doing too much (32 dependencies)
29
@pcameronpresley 30
@pcameronpresley 31
@pcameronpresley 32
@pcameronpresley
Two Goals
33
1. Make sure the dependency can be passed
2. Make sure the dependency has an
abstraction
@pcameronpresley
First Steps
34
1. If the class is static, make it not static
2. If the class doesn’t have an abstraction,
define one
@pcameronpresley
Final Step
35
1. Inject the dependency using
constructor injection or
method injection
@pcameronpresley 36
@pcameronpresley
Problem with Static Classes
37
Can’t pass them as parameters
Can’t implement an interface or base class
@pcameronpresley
Removing Static Cling
38
Removing the static attribute is ideal, but not
always possible
Using the Wrapper pattern, we can define
another class that is not static to wrap around
the static and then pass that around
@pcameronpresley 39
@pcameronpresley 40
@pcameronpresley
Passing Dependencies
41
Constructor vs Method Injection
“Will this dependency need to change
during the object’s lifetime?”
@pcameronpresley 42
@pcameronpresley 43
@pcameronpresley 44
@pcameronpresley 45
@pcameronpresley
80% of issues come from
these two principles
Remaining principles cover
the additional 20%
46
@pcameronpresley 47
@pcameronpresley 48
@pcameronpresley 49
@pcameronpresley
Classes should be
open for extension,
closed for modification
50
@pcameronpresley
Add new functionality by
adding new classes, not
modifying existing ones
51
@pcameronpresley 52
@pcameronpresley
Modifying a class to add functionality can break
something downstream
OCP forces us to add functionality by creating
new classes and then using an abstraction
Safer to create a new class and inject the
behavior
53
@pcameronpresley
Modifying a class to add functionality can break
something downstream
OCP forces us to add functionality by creating
new classes and then using an abstraction
Safer to create a new class and inject the
behavior
54
@pcameronpresley
Modifying a class to add functionality can break
something downstream
OCP forces us to add functionality by creating
new classes and then using an abstraction
Safer to create a new class and inject the
behavior
55
@pcameronpresley 56
@pcameronpresley 57
1. Refactor to Factory Pattern
2. Original class becomes the
Factory
3. Update clients to use the
Factory instead
@pcameronpresley 58
@pcameronpresley 59
@pcameronpresley 60
@pcameronpresley 61
@pcameronpresley 62
@pcameronpresley
Adding a New Calculator
63
1. Create the class
2. Implement IShippingCalculator interface
3. Implement business rules
4. Update the factory to return the correct
calculator
@pcameronpresley 64
@pcameronpresley 65
@pcameronpresley
New Requirement!
66
@pcameronpresley 67
@pcameronpresley 68
@pcameronpresley 69
@pcameronpresley 70
@pcameronpresley
Type casting to perform logic is a bad abstraction
“Leaky Abstractions”
Can’t lean on the compiler for error finding
71
@pcameronpresley 72
@pcameronpresley
Not all Books are created equally
What if we changed our abstraction?
73
@pcameronpresley 74
@pcameronpresley 75
@pcameronpresley
If two classes are derived from the same
abstraction, then they should be
interchangeable
Should not depend upon the class of the
abstraction to do work
76
@pcameronpresley 77
@pcameronpresley 78
@pcameronpresley 79
@pcameronpresley 80
@pcameronpresley 81
@pcameronpresley
Can find out what “can” be done, not what
“should” be done
Header vs Role Interface
Shape abstractions based on roles
82
@pcameronpresley 83
@pcameronpresley 84
1. One role to track inventory when an order is
made
2. Define an interface with required methods
3. Update InventoryManager so that it implements
the new interface
4. Update client code to use the new interface
@pcameronpresley 85
@pcameronpresley 86
@pcameronpresley 87
@pcameronpresley
@pcameronpresley 89
• What is SOLID?
• Why should our code be SOLID?
• What do the principles stand for?
• How to spot issues? How to fix them?
• Doing Too Much and Bad Abstractions
@pcameronpresley 90
@pcameronpresley
Agile Principles, Patterns, and Practices by Robert C. Martin
Clean Code: A Handbook of Agile Software Craftsmanship by Robert
C. Martin
Working Effectively With Legacy Code by Michael Feathers
Refactoring by Martin Fowler
SOLID Principles of Object Oriented Design by Steve Smith
Role Interfaces by Martin Fowler
https://blog.TheSoftwareMentor.com/presentations/#SOLID
91
1 of 91

Recommended

Level Up Your Functional Programming Skills with LINQ by
Level Up Your Functional Programming Skills with LINQLevel Up Your Functional Programming Skills with LINQ
Level Up Your Functional Programming Skills with LINQCameron Presley
298 views84 slides
The Engineer's Playbook: Starting a New Role by
The Engineer's Playbook: Starting a New RoleThe Engineer's Playbook: Starting a New Role
The Engineer's Playbook: Starting a New RoleCameron Presley
74 views134 slides
Making the Unstable Stable - An Intro To Testing by
Making the Unstable Stable - An Intro To TestingMaking the Unstable Stable - An Intro To Testing
Making the Unstable Stable - An Intro To TestingCameron Presley
432 views68 slides
Concurrency Errors in Java by
Concurrency Errors in JavaConcurrency Errors in Java
Concurrency Errors in JavaCoverity
4.6K views14 slides
[Srijan Wednesday Webinars] Choosing the Right Testing Framework by
[Srijan Wednesday Webinars] Choosing the Right Testing Framework[Srijan Wednesday Webinars] Choosing the Right Testing Framework
[Srijan Wednesday Webinars] Choosing the Right Testing FrameworkSrijan Technologies
499 views25 slides
How Functional Programming Made Me a Better Developer by
How Functional Programming Made Me a Better DeveloperHow Functional Programming Made Me a Better Developer
How Functional Programming Made Me a Better DeveloperCameron Presley
454 views76 slides

More Related Content

What's hot

Cje demo by
Cje demoCje demo
Cje demonoyenmaih
60 views4 slides
Dot all 2019 | Testing with Craft | Giel Tettelar by
Dot all 2019 | Testing with Craft | Giel TettelarDot all 2019 | Testing with Craft | Giel Tettelar
Dot all 2019 | Testing with Craft | Giel TettelarGiel Tettelaar
155 views27 slides
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015] by
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015][XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015]
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015]Agile đây Vietnam
558 views35 slides
Is Xp still extreme? by
Is Xp still extreme?Is Xp still extreme?
Is Xp still extreme?Kiro Harada
2.9K views50 slides
Pair programming demystified by
Pair programming demystifiedPair programming demystified
Pair programming demystifiedMarek Kirejczyk
1.1K views38 slides
OSS Java Analysis - What You Might Be Missing by
OSS Java Analysis - What You Might Be MissingOSS Java Analysis - What You Might Be Missing
OSS Java Analysis - What You Might Be MissingCoverity
3.1K views14 slides

What's hot(7)

Dot all 2019 | Testing with Craft | Giel Tettelar by Giel Tettelaar
Dot all 2019 | Testing with Craft | Giel TettelarDot all 2019 | Testing with Craft | Giel Tettelar
Dot all 2019 | Testing with Craft | Giel Tettelar
Giel Tettelaar155 views
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015] by Agile đây Vietnam
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015][XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015]
[XPday.vn] Legacy code workshop (at) [XP Day Vietnam 2015]
Is Xp still extreme? by Kiro Harada
Is Xp still extreme?Is Xp still extreme?
Is Xp still extreme?
Kiro Harada2.9K views
OSS Java Analysis - What You Might Be Missing by Coverity
OSS Java Analysis - What You Might Be MissingOSS Java Analysis - What You Might Be Missing
OSS Java Analysis - What You Might Be Missing
Coverity3.1K views
Product! - The road to production deployment by Filippo Zanella
Product! - The road to production deploymentProduct! - The road to production deployment
Product! - The road to production deployment
Filippo Zanella627 views

Similar to Establishing a SOLID Foundation

Dependency Injection for PHP by
Dependency Injection for PHPDependency Injection for PHP
Dependency Injection for PHPmtoppa
4.4K views71 slides
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019 by
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019Paulo Clavijo
262 views36 slides
Programming for a better world by
Programming for a better worldProgramming for a better world
Programming for a better worldjhansi reddy
399 views34 slides
Design p atterns by
Design p atternsDesign p atterns
Design p atternsAmr Abd El Latief
110 views58 slides
Mvc by
MvcMvc
Mvccreynders
425 views12 slides
Deeplearning for industries | Data to Production by
Deeplearning for industries | Data to ProductionDeeplearning for industries | Data to Production
Deeplearning for industries | Data to ProductionRahul Kumar
31 views45 slides

Similar to Establishing a SOLID Foundation(20)

Dependency Injection for PHP by mtoppa
Dependency Injection for PHPDependency Injection for PHP
Dependency Injection for PHP
mtoppa4.4K views
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019 by Paulo Clavijo
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
Paulo Clavijo262 views
Programming for a better world by jhansi reddy
Programming for a better worldProgramming for a better world
Programming for a better world
jhansi reddy399 views
Deeplearning for industries | Data to Production by Rahul Kumar
Deeplearning for industries | Data to ProductionDeeplearning for industries | Data to Production
Deeplearning for industries | Data to Production
Rahul Kumar31 views
Rails Conf 2014 Concerns, Decorators, Presenters, Service-objects, Helpers, H... by Justin Gordon
Rails Conf 2014 Concerns, Decorators, Presenters, Service-objects, Helpers, H...Rails Conf 2014 Concerns, Decorators, Presenters, Service-objects, Helpers, H...
Rails Conf 2014 Concerns, Decorators, Presenters, Service-objects, Helpers, H...
Justin Gordon14.5K views
Quickly Testing Legacy Code - ACCU York April 2019 by Clare Macrae
Quickly Testing Legacy Code - ACCU York April 2019Quickly Testing Legacy Code - ACCU York April 2019
Quickly Testing Legacy Code - ACCU York April 2019
Clare Macrae243 views
Limiting WIP: Doing Less to Do More by Julie Wyman
Limiting WIP: Doing Less to Do MoreLimiting WIP: Doing Less to Do More
Limiting WIP: Doing Less to Do More
Julie Wyman44 views
Semantic Merge - No fear refactoring by psluaces
Semantic Merge - No fear refactoringSemantic Merge - No fear refactoring
Semantic Merge - No fear refactoring
psluaces1.1K views
The Unicorn Project and The Five Ideals (older: see notes for newer version) by Gene Kim
The Unicorn Project and The Five Ideals (older: see notes for newer version)The Unicorn Project and The Five Ideals (older: see notes for newer version)
The Unicorn Project and The Five Ideals (older: see notes for newer version)
Gene Kim33.8K views
My Three Ex’s: A Data Science Approach for Applied Machine Learning by Daniel Tunkelang
My Three Ex’s: A Data Science Approach for Applied Machine LearningMy Three Ex’s: A Data Science Approach for Applied Machine Learning
My Three Ex’s: A Data Science Approach for Applied Machine Learning
Daniel Tunkelang15.9K views
Master class in modern Java by Miro Cupak
Master class in modern JavaMaster class in modern Java
Master class in modern Java
Miro Cupak733 views
React hooks Episode #1: An introduction. by ManojSatishKumar
React hooks Episode #1: An introduction.React hooks Episode #1: An introduction.
React hooks Episode #1: An introduction.
ManojSatishKumar137 views
Testing GraphQL in Your JavaScript Application: From Zero to Hundred Percent by Roy Derks
Testing GraphQL in Your JavaScript Application: From Zero to Hundred PercentTesting GraphQL in Your JavaScript Application: From Zero to Hundred Percent
Testing GraphQL in Your JavaScript Application: From Zero to Hundred Percent
Roy Derks121 views
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 by Alexander Lisachenko
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
SigOpt at MLconf - Reducing Operational Barriers to Model Training by SigOpt
SigOpt at MLconf - Reducing Operational Barriers to Model TrainingSigOpt at MLconf - Reducing Operational Barriers to Model Training
SigOpt at MLconf - Reducing Operational Barriers to Model Training
SigOpt165 views

More from Cameron Presley

Taking a Gamble with Functional Domain Modeling by
Taking a Gamble with Functional Domain ModelingTaking a Gamble with Functional Domain Modeling
Taking a Gamble with Functional Domain ModelingCameron Presley
152 views88 slides
Functional Programming Through Construction : First Principles by
Functional Programming Through Construction : First PrinciplesFunctional Programming Through Construction : First Principles
Functional Programming Through Construction : First PrinciplesCameron Presley
117 views86 slides
How to Have Code Reviews That Developers Actually Want by
How to Have Code Reviews That Developers Actually WantHow to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually WantCameron Presley
500 views59 slides
Indy Code - Taking a Gamble With F#: Implementing Blackjack by
Indy Code - Taking a Gamble With F#: Implementing BlackjackIndy Code - Taking a Gamble With F#: Implementing Blackjack
Indy Code - Taking a Gamble With F#: Implementing BlackjackCameron Presley
727 views109 slides
How Functional Programming Made Me A Better Developer by
How Functional Programming Made Me A Better DeveloperHow Functional Programming Made Me A Better Developer
How Functional Programming Made Me A Better DeveloperCameron Presley
328 views64 slides
Establishing a SOLID Foundation - An Intro to Software Design by
Establishing a SOLID Foundation - An Intro to Software DesignEstablishing a SOLID Foundation - An Intro to Software Design
Establishing a SOLID Foundation - An Intro to Software DesignCameron Presley
201 views74 slides

More from Cameron Presley(6)

Taking a Gamble with Functional Domain Modeling by Cameron Presley
Taking a Gamble with Functional Domain ModelingTaking a Gamble with Functional Domain Modeling
Taking a Gamble with Functional Domain Modeling
Cameron Presley152 views
Functional Programming Through Construction : First Principles by Cameron Presley
Functional Programming Through Construction : First PrinciplesFunctional Programming Through Construction : First Principles
Functional Programming Through Construction : First Principles
Cameron Presley117 views
How to Have Code Reviews That Developers Actually Want by Cameron Presley
How to Have Code Reviews That Developers Actually WantHow to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually Want
Cameron Presley500 views
Indy Code - Taking a Gamble With F#: Implementing Blackjack by Cameron Presley
Indy Code - Taking a Gamble With F#: Implementing BlackjackIndy Code - Taking a Gamble With F#: Implementing Blackjack
Indy Code - Taking a Gamble With F#: Implementing Blackjack
Cameron Presley727 views
How Functional Programming Made Me A Better Developer by Cameron Presley
How Functional Programming Made Me A Better DeveloperHow Functional Programming Made Me A Better Developer
How Functional Programming Made Me A Better Developer
Cameron Presley328 views
Establishing a SOLID Foundation - An Intro to Software Design by Cameron Presley
Establishing a SOLID Foundation - An Intro to Software DesignEstablishing a SOLID Foundation - An Intro to Software Design
Establishing a SOLID Foundation - An Intro to Software Design
Cameron Presley201 views

Recently uploaded

Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...ShapeBlue
199 views20 slides
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023BookNet Canada
44 views19 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
183 views18 slides
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R... by
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...ShapeBlue
178 views15 slides
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...ShapeBlue
171 views28 slides
Business Analyst Series 2023 - Week 4 Session 7 by
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7DianaGray10
146 views31 slides

Recently uploaded(20)

Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue199 views
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada44 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue183 views
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R... by ShapeBlue
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
ShapeBlue178 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue171 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10146 views
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by ShapeBlue
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystems
ShapeBlue247 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue129 views
"Node.js Development in 2024: trends and tools", Nikita Galkin by Fwdays
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin
Fwdays33 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue139 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays36 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue162 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc176 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue208 views
The Power of Generative AI in Accelerating No Code Adoption.pdf by Saeed Al Dhaheri
The Power of Generative AI in Accelerating No Code Adoption.pdfThe Power of Generative AI in Accelerating No Code Adoption.pdf
The Power of Generative AI in Accelerating No Code Adoption.pdf
Saeed Al Dhaheri39 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue207 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue224 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue225 views

Establishing a SOLID Foundation

Editor's Notes

  1. What is SOLID? Why Should Our Code Be SOLID? Exploring the SOLID principles Additional Resources
  2. What is SOLID?
  3. Why is this a good idea?
  4. Spend most of your time reading?
  5. Or writing?
  6. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  7. Who maintains the code once you leave?
  8. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  9. Extract to methods!
  10. Extract to classes!
  11. How Do We Spot Errors?
  12. How do we fix this?
  13. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  14. How do we fix this?
  15. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  16. How do we fix this?
  17. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  18. How do we fix this?
  19. Optimize for Time-To-Context (i.e. how long does it take to read code before understanding what it does?)
  20. How do we fix this?
  21. Wrapping Things Up