A quick overview of four fundamental principles for writing clean, maintainable, and scalable code: SOLID, DRY, KISS, and YAGNI.
A set of five object-oriented design principles introduced by Robert C. Martin (Uncle Bob):
-
S - Single Responsibility Principle (SRP)
A class should have only one reason to change.
➤ One class = One responsibility. -
O - Open/Closed Principle (OCP)
Software entities should be open for extension, but closed for modification.
➤ Add new features without modifying existing code (use abstraction and polymorphism). -
L - Liskov Substitution Principle (LSP)
Subtypes must be substitutable for their base types.
➤ A subclass should behave like its parent class without breaking the program. -
I - Interface Segregation Principle (ISP)
Many client-specific interfaces are better than one general-purpose interface.
➤ Classes should not be forced to implement methods they don’t use. -
D - Dependency Inversion Principle (DIP)
Depend on abstractions, not on concrete implementations.
➤ High-level modules shouldn’t depend on low-level ones.
"Every piece of knowledge must have a single, unambiguous representation in the system."
- Avoid duplicating code or logic.
- Centralize reusable logic in a single place.
✔️ Good:
function calculateDiscount(price: number) {
return price > 100 ? price * 0.1 : 0;
}
“Simplicity is key to maintainability.”
- Prefer simple and clear solutions over overly abstract or complex ones.
- Don’t over-engineer unless it’s necessary.
✔️ Good:
function add(a: number, b: number) {
return a + b;
}
“Don’t implement functionality until it’s actually needed.” • Avoid adding speculative features. • Focus only on the current requirements to keep the codebase lean.
⸻
- SOLID → Helps structure complex systems.
- DRY → Keeps logic consistent.
- KISS → Avoids unnecessary complexity.
- YAGNI → Prevents writing unused code.