Interface Segregation Principle (ISP) starts that many client-specific interfaces are better than one general purpose interface. So you should not have to implement the methods you do not use there by providing Low Coupling and High Cohesion
High Cohesion : Keep similar and related things together.
Example
Without ISP
interface ICustomer // existing
{
void Add();
}
interface ICustomerImproved
{
void Add();
void Read(); // Existing Functionality, BAD
}
With ISP:
Create a new interface, that the class can extend from
interface ICustomerV1 : ICustomer
{
void Read();
}
class CustomerWithRead : ICustomer, ICustomerV1
{
void Add()
{
var customer = new Customer();
customer.Add(new Database());
}
void Read()
{
// GOOD: New functionality here!
}
}
// e.g.
void ManipulateCustomers()
{
var database = new Database();
var customer = new Customer();
customer.Add(database); // Old functionality, works fine
var readCustomer = new CustomerWithRead();
readCustomer.Read(); // Good! New functionalty is separate from existing customers
}