SOLID principles described on a real-life example.
Purpose of this tutorial is to illustrate how SOLID principles can impact your project and make it more robust. Every programmer knows that there is no better way to understand a programming term than by seeing a real-life example. That's why, this tutorial uses a probable history that could happen to everybody to depict how implementation of each of SOLID princples during the development process can help to maintain and create a product. The history involves a product owner (i.e. "the Boss" or "client"), programmer (i.e. "you") and the product.
The term SOLID has been first introduced by Robin C. Martin (Uncle Bob). It is an acronym for:
- Single Responsibility Principle (SRP)
- Open-Closed Principle (OCP)
- Liskov Substitution Principle (LSP)
- Interface Segregation Principle (ISP)
- Dependency Inversion Principle (DIP)
The principles specify common patterns (although they are not Design Patterns) that should be considered during the development of object-oriented code in order to keep it easy to maintain, extend and develop within a team of engineers. They are not associated with any specific programming language - nevertheless they are not implementable in non-object-oriented code. Each of the principles describes another rule and helps to deal with another problem. As everything in software design, the principles are not always implementable and/or there might be some occasions in which they could introduce more problems than they solve but every software engineer should know them and stick to the superior rule:
You are allowed to bend a SOLID rule only if you can provide dispassionate arguments for "why the rule should not be used" and "why is your non-SOLID solution better". If both of the questions cannot be answered and supported objectively, there is no excuse for you to bypass the SOLID rules.
You need to be familiar with the Object Oriented Programming concept and the programming language used in the selected tutorial.
Eveyone is welcome to make contributions to the tutorial. Especially, it needs examples in many programming languages in order to be easily understanable by vast group of developers. In order to commit, please follow the common Pull request procedure.