Design Patterns for Agile world
Design patterns with Design principle for Agile world
What are Design patterns?
Design patterns are solutions to real world problems that pop up time and again, so instead of reinventing the wheel, we follow the design patterns that are well-proven, tested by others, follow as safe guidelines.
What are Software Design principles?
Software design principles represent a set of guidelines that helps us to avoid having a bad design. The design principles are associated to Robert Martin who gathered them in "Agile Software Development: Principles, Patterns, and Practices". According to Robert Martin there are 3 important characteristics of a bad design that should be avoided:
Rigidity - It is hard to change because every change affects too many other parts of the system.
Fragility - When you make a change, unexpected parts of the system break.
Immobility - It is hard to reuse in another application because it cannot be disentangled from the current application.
Design principles are important when going with Agile development where requirements keep changing, dependency on different modules, lack of technical expertise, etc.
This happens in our day to day life and all of us might have faced above mentioned problems.
How to handle these problems
We have to stick to Design principles in all the phases of SDLC (software development life cycle), we have to follow the software principles but need to take a special consideration during analysis, design and coding phases. When requirement changes, we need to deliberately analyze the code and make sure basic software principle shouldn't be violated.
Design principles followed by many :
The Single Responsibilities Principle (SRP)
Open and Close Principle (OCP)
Liskov Substitution Principle (LSP)
Interface Segregation Principles (ISP)
Dependency Inversion Principle (DIP)
[Above 5 principle are SOLID]
DRY (Don't repeat yourself)
YAGNI (You aren't gonna need it)
Note: If you see any corrections or have suggestions please do let me know.