Some of the Key factors need to consider while architecting or designing a software solution is Reusability, Extensibility.Many times you might have gone through various tutorials on SOLID software design principles. Don’t mind... let me put it here again on my words and my understandings.
The key behind any good software design is Low coupling and High cohesion. The term itself give some hint what it mean. Anyway, you will get more insight when you read on further. If you design your software by following the mentioned SOLID principles it is guaranteed to a great extent that it will be loosely coupled and with high degree of cohesion. Let me delve deeper..
What is SOLID ?
S Singularity Principle
- There should never be more than one reason for class to change. Ideally, each class should have only a single purpose within the system
O Open Closed Principle
-Software Entities like Classes, Modules, Functions, etc. should be open for extension but closed for modifications.
L Liskov Substitution Principle
- Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it
I Interface Segregation Principle
- Clients should not be forced to depend upon interfaces that they don’t use. Means,separate client specific interfaces are always better than one general purpose interface.
D Dependency Inversion Principle
- High level modules should not depend on low level module. Both should depend on abstraction
Abstraction should not depend on details. Details should depend on Abstraction.