What is SOLID The S in SOLID The O in SOLID The L in SOLID The I in SOLID The D in SOLID Questions
A means to avoid technical debt Decrease Coupling Increase Cohesion Maintainable Extensible Testable
Guidelines, NOT LAWS You got to know when to hold’em, know when to fold’em, Know when to walk away and know when to run. -Kenny Rogers
Application Flat File Sender Send GetMessage
Single Responsibility Principle There should never be more than one reason for a class to change -Uncle Bob
VIOLATES THE PRINCIPLEABIDES BY THE PRINCIPLE Application Flat File Sender Send GetMessage Application Flat File FileReader GetMessage Sender Send
Application Flat File FileReader GetMessage Sender Send XML File
Open-Close Principle Software entities (classes, modules, functions, etc…) should be open for extension, but closed for modification -Uncle Bob
VIOLATES THE PRINCIPLEABIDES BY THE PRINCIPLE Application Flat File FileReader GetMessage Sender Send XML File Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader
Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader DB File DbFileReader CanRead ReadFile Database
Liskov Substitution Principle Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it -Uncle Bob
VIOLATES THE PRINCIPLEABIDES BY THE PRINCIPLE Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader DB File DbFileReader CanRead ReadFile Database Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader DbReader GetMessage Database
Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader Database IReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader DbReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader
Interface Segregation Principle Clients should not be forced to depend upon interfaces that they do not use -Uncle Bob
ABIDES BY THE PRINCIPLE Application Flat File BaseFileTypeReader CanRead ReadFile Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader Database IReader GetMessage DbReader GetMessage IFileTypeReaderRegisterable RegisterDefaultFileTypeReader RegisterFileTypeReader
Dependency Inversion Principle High level modules should not depend upon low level modules. Both should depend upon abstractions Abstractions should not depend upon details. Details should depend upon abstractions -Uncle Bob
ABIDES BY THE PRINCIPLE Application Flat File BaseFileTypeReader CanRead ReadFile I Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader Database IReader GetMessage DbReader GetMessage IFileTypeReaderRegisterable RegisterDefaultFileTypeReader RegisterFileTypeReader Sender Send
Application Flat File Sender Send GetMessage Xml File Database
Application Flat File BaseFileTypeReader CanRead ReadFile I Sender Send XML File FlatFileReader CanRead ReadFile XmlFileReader CanRead ReadFile FileReader GetMessage RegisterDefaultFileTypeReader RegisterFileTypeReader Database IReader GetMessage DbReader GetMessage IFileTypeReaderRegisterable RegisterDefaultFileTypeReader RegisterFileTypeReader Sender Send
Martin Folwer – Technical Debt Wikipedia – Coupling Wikipedia – Cohesion Robert Martin – The Principles of OOD Derick Bailey – SOLID Principles – Step by step code training/tree/master/SOLID%20Principles%20- %20Step%20By%20Step%20Code training/tree/master/SOLID%20Principles%20- %20Step%20By%20Step%20Code
– Twitter LinkedIn –