Single Responsibility Principle: A class should be limited to a single responsibility. There should be one and only one reason to change a class. Supported by Object Composition (Composites), Strategy/Template Pattern etc. Key guidelines clearly defined boundaries as to where a piece of functionality is “implemented”; information-hiding in components that protect the integrity of data; […]