Principles
KISS (Keep It Simple, Stupid): Emphasizes simplicity in design to avoid unnecessary complexity.
YAGNI (You Ain't Gonna Need It): Encourages developers to avoid adding features or functionality until it's proven necessary.
DRY (Don't Repeat Yourself): Promotes code reusability by avoiding duplication of code.
Overengineering: Designing the system to be more complex or sophisticated than necessary, often resulting in unnecessary costs, resources, or complications.
Premature Optimization: Optimizing code or processes before it is clear where optimization is truly needed, often resulting in wasted time and effort.
Separation of Concerns: Divides a software system into distinct sections, each addressing a specific concern or functionality.
Single Responsibility Principle (SRP): A class or module should have only one reason to change, meaning it should only have one responsibility.
Open/Closed Principle (OCP): Software entities should be open for extension but closed for modification.
Liskov Substitution Principle (LSP): Objects of a superclass should be replaceable with objects of a subclass without affecting the correctness of the program.
Interface Segregation Principle (ISP): A class should not be forced to implement interfaces it does not use.
Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules; both should depend on abstractions.
Law of Demeter (LoD): A module should not be aware of the internal workings of the objects it interacts with.
Minimize Coupling and Maximize Cohesion: Reduce dependencies between different components while ensuring strong connections within each component.
Principle of Least Astonishment (POLA): Design should not surprise its users; it should behave as expected.
Last updated