Overview of Single 
Responsibility Principle (SRP)
 
It states that every object should have a single responsibility, and that 
responsibility should be entirely encapsulated by the class. There should not be 
more than one reason to change the class. This means class should be designed 
for one purpose only. This principle states that if we have 2 reasons to change 
for a class, we have to split the functionality in two classes. Each class will 
handle only one responsibility and on future if we need to make one change we 
are going to make it in the class which handle it. When we need to make a change 
in a class having more responsibilities the change might affect the other 
functionality of the classes. 
Intent
A class should have only one reason to change.
Example
In short, it says that a subsystem, module, class, or even a function, should 
not have more than one reason to change. The classic example is a class that has 
methods that deal with business rules, reports, and database: Below example 
shows how it violates the rule of single responsibility Principle. Employee 
class has designed to save,Modify and GetEmployeeInfo() 
records from Database but MAPEmployee() 
method is used for mapping Database columns with the Employee class  attributes 
which can be altered if there is any changes in DB
Public Class EmployeeService
{
public void SaveEmployeeInfo(Employee e)
{// To do something}
public void UpdateEmployeeInfo(int empId, Employee e)
{//To do Something
}
public Employee GetEmployeeInfo(int empID)
{// To do something
}
public void MAPEmployee(SqlDatareader reader)
{// To do something
}
}
We can segregate the classes into two classes which will implement only 
MAPEmployee, so that if there are any changes in DB no need to change 
EmployeeService class
Public Class EmployeeService
{
public void SaveEmployeeInfo(Employee e)
{// To do something}
public void UpdateEmployeeInfo(int empId, Employee e)
{//To do Something
}
public Employee GetEmployeeInfo(int empID)
{// To do something
}
}
Public Class ExtendEmployeeService:EmployeeService
{
public void MAPEmployee(SqlDatareader reader)
{// To do something
}
}
Conclusion
The Single Responsibility Principle represents a good way of identifying classes 
during the design phase of an application and it reminds you to think of all the 
ways a class can evolve. A good separation of responsibilities is done only when 
the full picture of how the application should work is well understand.