In software engineering, SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible, and maintainable. The principles are a subset of many principles promoted by American software engineer and instructor Robert C. Martin, first introduced in his 2000 paper Design Principles and Design Patterns.
The SOLID ideas are
- The single-responsibility principle: "There should never be more than one reason for a class to change." In other words, every class should have only one responsibility.
- The open–closed principle: "Software entities ... should be open for extension, but closed for modification."
- The Liskov substitution principle: "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it." See also design by contract.
- The interface segregation principle: "Many client-specific interfaces are better than one general-purpose interface."
- The dependency inversion principle: "Depend upon abstractions, [not] concretions."
The SOLID acronym was introduced later, around 2004, by Michael Feathers.
- Code reuse
- Inheritance (object-oriented programming)
- Package principles
- Don't repeat yourself (DRY)
- GRASP (object-oriented design)
- KISS principle
- You aren't gonna need it (YAGNI)
- Robert C. Martin. "Principles Of OOD". butunclebob.com. Retrieved 2014-07-17.. (Note the reference to "the first five principles", although the acronym is not used in this article.) Dates back to at least 2003.
- Robert C. Martin. "Getting a SOLID start". objectmentor.com. Retrieved 2013-08-19.
- Sandi Metz (May 2009). "SOLID Object-Oriented Design". YouTube. Archived from the original on 2021-12-21. Retrieved 2019-08-13. Talk given at the 2009 Gotham Ruby Conference.
- Martin, Robert C. (2000). "Design Principles and Design Patterns" (PDF). Archived from the original (PDF) on 2015-09-06.
- "Single Responsibility Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 2 February 2015.
- Martin, Robert C. (2003). Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. p. 95. ISBN 978-0135974445.
- "Open/Closed Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- "Liskov Substitution Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- "Interface Segregation Principle" (PDF). objectmentor.com. 1996. Archived from the original (PDF) on 5 September 2015.
- "Dependency Inversion Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- Martin, Robert (2018). Clean Architecture: A Craftsman's Guide to Software Structure and Design. p. 58. ISBN 9780134494166.