Showing posts with label Interface Segregation Principle (ISP). Show all posts
Showing posts with label Interface Segregation Principle (ISP). Show all posts

18 October 2023

Interface Segregation Principle (ISP)

  Interface Segregation Principle (ISP)

The Interface Segregation Principle (ISP) is one of the SOLID principles of object-oriented design. It states that no client should be forced to depend on methods it does not use. In simpler terms, it suggests that a class should not be forced to implement interfaces it doesn't use. Instead of having large interfaces with many methods, it's better to have smaller, more specific interfaces.

Let's explore the Interface Segregation Principle with an example in C#. Imagine you have an interface called `IWorker` that represents different tasks a worker can do:

```csharp

public interface IWorker

{

    void Work();

    void Eat();

    void Sleep();

}

In this interface, a worker can work, eat, and sleep. However, consider a scenario where you have different types of workers - regular workers who do all tasks, and part-time workers who only work and eat. If both types of workers are forced to implement the `IWorker` interface as it is, it would violate the Interface Segregation Principle because the part-time workers would be implementing methods they don't use (`Sleep` method).

A better approach would be to segregate the interface into smaller interfaces, each representing a specific functionality. For example:

```csharp

public interface IWorkable

{

    void Work();

}

public interface IEatable

{

    void Eat();

}

public interface ISleepable

{

    void Sleep();

}

Now, the regular workers can implement all three interfaces, while the part-time workers only need to implement `IWorkable` and `IEatable`, avoiding the unnecessary implementation of the `Sleep` method.

Here's an implementation of regular and part-time workers using the segregated interfaces:

```csharp

public class RegularWorker : IWorkable, IEatable, ISleepable

{

    public void Work()

    {

        Console.WriteLine("Regular worker is working.");

    }

    public void Eat()

    {

        Console.WriteLine("Regular worker is eating.");

    }

    public void Sleep()

    {

        Console.WriteLine("Regular worker is sleeping.");

    }

}

public class PartTimeWorker : IWorkable, IEatable

{

    public void Work()

    {

        Console.WriteLine("Part-time worker is working.");

    }

    public void Eat()

    {

        Console.WriteLine("Part-time worker is eating.");

    }

}

By adhering to the Interface Segregation Principle, you create more specialized and cohesive interfaces, leading to more maintainable and flexible code. Classes and objects can implement only the interfaces that are relevant to them, avoiding unnecessary dependencies and ensuring that clients are not forced to depend on methods they don't use.

Consistency level in Azure cosmos db

 Consistency level in Azure cosmos db Azure Cosmos DB offers five well-defined consistency levels to provide developers with the flexibility...