Skip to main content

SOLID Principles - Interface Segregation Principle (ISP) Real-Time Example in C#

The SOLID Principles are the design principles that enable us to manage several software design problems. These principles provide us with ways to move from tightly coupled code to loosely coupled and encapsulated real business needs properly. Also readable, adaptable, and scalable code.

The SOLID Principles guide developers as they write readable, adaptable, and scalable code or design an application.

The SOLID Principles can be applied to any OOP program.

The SOLID Principles were developed by computer science instructor and author Robert C. Martin. Now, SOLID principles have also been adopted in both agile development and adaptive software development.

The 5 principles of SOLID are:

1.      Single Responsibility Principle (SRP)

2.      Open Closed Principle (OCP)

3.      Liskov Substitution Principle (LSP)

4.      Interface Segregation Principle (ISP)

5.      Dependency Inversion Principle (DIP)

 

SOLID Principle: (4) Interface Segregation Principle (ISP)

The Interface Segregation Principle (ISP) is one of the SOLID principles of object-oriented design.

By Robert C. Martin -

Interface Segregation Principle (ISP) states that clients should not be forced to implement interfaces they do not use.

Interface Segregation Principle (ISP) splits interfaces that are very large into smaller and more specific ones so that clients will only have to know about the methods they actually need.

 

Implementation:  Interface Segregation Principle (ISP) C# Live Example:

Let us consider an example to Explain the Interface Segregation Principle (ISP) in C#, suppose we have an IWorker interface that defines methods for various types of work, such as Work, Eat, and Sleep.

 

First, define an interface IWorker interface that has three methods Work (), Eat (), and Sleep ():

//IWorker interface

public interface IWorker

{

    void Work();

    void Eat();

    void Sleep();

}

Now, imagine we have two classes, HumanWorker and RobotWorker, that implement to IWorker interface.


Second, define a HumanWorker class that implements the IWorker interface:

//HumanWorker class that implements to IWorker interface

public class HumanWorker: IWorker

{

    public void Work() { /*...*/ }

    public void Eat() { /*...*/ }

    public void Sleep() { /*...*/ }

}


Third, define a RobotWorker class that also implements the IWorker interface. The Robot cannot Eat and Sleep but is forced to Eat () and Sleep () methods (violates the ISP):

//RobotWorker class that implements to IWorker interface

public class RobotWorker : IWorker

{

    public void Work() { /*...*/ }

 

    /* Not needed for robots worker because they not eat food. */

    public void Eat() { /*...*/ }

 

    /* Not needed for robots worker because they not eat sleep. */

    public void Sleep() { /*...*/ }

}

Here IWorker interface violates the Interface Segregation Principle (ISP) and it's forcing the RobotWorker class to implement the Eat () and Sleep () methods that are irrelevant to the robot’s class.

To fix the issue of violating the Interface Segregation Principle (ISP), we need to break down the large interface into smaller ones.

Let's break down the IWorker interface into smaller, See the C# code,

//IWorkable interface

public interface IWorkable

{

    void Work();

}

 

//IEatable interface

public interface IEatable

{

    void Eat();

}

 

//ISleepable interface

public interface ISleepable

{

    void Sleep();

}

 

Now, the HumanWorker class will implement all three interfaces (IWorkable, IEatable, ISleepable), while the RobotWorker class only needs to implement the (IWorkable) interface. See the C# code,

//HumanWorker class and inherited to IWorkable, IEatable, ISleepable interfaces

public class HumanWorker: IWorkable, IEatable, ISleepable

{

    public void Work() { /*...*/ }

    public void Eat() { /*...*/ }

    public void Sleep() { /*...*/ }

}

 

//RobotWorker class and inherited only IWorkable interface

public class RobotWorker: IWorkable

{

    public void Work() { /*...*/ }

}

 

Now we have ensured that clients only implement the methods they actually need.


Put it all together to follow the Interface Segregation Principle (ISP) in C#,

 

namespace ISP;

 

public interface IWorkable

{

    void Work();

}

public interface IEatable

{

    void Eat();

}

public interface ISleepable

{

    void Sleep();

}

public class HumanWorker: IWorkable, IEatable, ISleepable

{

    public void Work () {/*...*/}

    public void Eat () {/*...*/}

    public void Sleep () {/*...*/}

}

 

public class RobotWorker: IWorkable

{

    public void Work () {/*...*/}

}

public class Program

{

    public static void Main(string[] args)

    {

        // HumanWorker

        var homenWorker = new HumanWorker();

        homenWorker.Work();

        homenWorker.Eat();

        homenWorker.Sleep();

 

        // RobotWorker

        var robotWorker = new RobotWorker();

        robotWorker.Work();

    }

}


What Are the Advantages of Interface Segregation Principle (ISP) in C#?

1.     Reduced Dependencies: Breaking interfaces into smaller, more specific ones reduces the number of methods each class is required to implement.

2.     Improved Code Maintainability: With smaller, more focused interfaces, it becomes easier to understand and maintain the code.

3.     Flexibility and Extensibility: Classes developed by the ISP are more flexible and extensible.

4.     Easier Testing: Smaller interfaces make it easier to create and perform unit tests.

5.     Avoiding Fat Interfaces: ISP prevents the creation of "fat interfaces". Fat interfaces violate the single responsibility principle. Breaking down interfaces helps avoid this issue.

6.     Clearer Intent: Specific interfaces convey the intent and responsibilities of implementing classes more clearly. This makes the codebase more self-documenting and easier to understand.

 What Are the Disadvantages of Interface Segregation Principle (ISP) in C#?

1.     Increased Number of Interfaces: More interfaces will create the challenge to manage and understand the relationships between various interfaces.

2.     Increased Development Time: Creating and managing a large number of small interfaces might increase the time and effort required during the development phase.

How to use the Interface Segregation Principle effectively in C#?

1.     Identify Client Needs: To identify the client needs and split fat interfaces into smaller ones.

2.     Refactor Existing Interfaces

3.     Avoid Fat Interfaces

4.     Apply Dependency Injection

 

Popular posts from this blog

25 Best Vue.js 2 Interview Questions and Answers

What Is Vue.js? The Vue.js is a progressive JavaScript framework and used to building the interactive user interfaces and also it’s focused on the view layer only (front end). The Vue.js is easy to integrate with other libraries and others existing projects. Vue.js is very popular for Single Page Applications developments. The Vue.js is lighter, smaller in size and so faster. It also supports the MVVM ( Model-View-ViewModel ) pattern. The Vue.js is supporting to multiple Components and libraries like - ü   Tables and data grids ü   Notifications ü   Loader ü   Calendar ü   Display time, date and age ü   Progress Bar ü   Tooltip ü   Overlay ü   Icons ü   Menu ü   Charts ü   Map ü   Pdf viewer ü   And so on The Vue.js was developed by “ Evan You ”, an Ex Google software engineer. The latest version is Vue.js 2. The Vue.js 2 is very similar to Angular because Evan ...

PHP Frameworks Interview Questions - Yii, Slim, Zend, PHPixie, F3, Aura Frameworks

» Yii 1.0/2.0 Interview Questions The Yii is a pure OOP based framework, free, open source, high-performance, component-based PHP framework for rapidly developing modern Web Applications and the name Yii is pronounced as Yee or [ji:]).... Posted In Yii » Slim Framework Interview Questions Slim Framework is a PHP micro framework that helps PHP developers to write quickly and easily a powerful web applications and APIs. Posted In Slim PHP » PHPixie Framework Interview Questions PHPixie is a Modern, open-source, fast, secure and a lightweight MVC PHP framework designed for speed and simplicity. Posted In PHPixie PHP » Fat Free Framework (F3) Interview Questions A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust web applications - fast! Posted In Fat Free Framework PHP » Aura PHP Framework Interview Questions Aura Framework is a collection of High-quality, well-tested, standards-compliant, decoupled libraries that can be used in any...

55 Best TypeScript Interview Questions and Answers - JavaScript!

What Is TypeScript? By definition, "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript." TypeScript is a superset of JavaScript which provides optional static typing, classes and interfaces. => The TypeScript was first made public in the year 2012. => Typescript is a modern age JavaScript development language. => TypeScript is a strongly typed, object oriented, compiled language. => TypeScript was designed by Anders Hejlsberg (designer of C#) at Microsoft. => TypeScript is both a language and a set of tools. As an Example of TypeScript, class Hello {     msg : string ;      constructor ( message : string ) {          this . msg = message ;      }       getMsg () {          return "Hello, " + this . msg ;      } } TypeScript introduced a great deal...

.NET Core MVC Interview Questions and Answers

» OOPs Interview Questions Object Oriented Programming (OOP) is a technique to think a real-world in terms of objects. This is essentially a design philosophy that uses a different set of programming languages such as C#... Posted In .NET » .Net Constructor Interview Questions A class constructor is a special member function of a class that is executed whenever we create new objects of that class. When a class or struct is created, its constructor is called. A constructor has exactly the same name as that of class and it does not have any return type… Posted In .NET » .NET Delegates Interview Questions Delegates are used to define callback methods and implement event handling, and they are declared using the "delegate" keyword. A delegate in C# is similar to function pointers of C++, but C# delegates are type safe… Posted In .NET » ASP.Net C# Interview Questions C# was developed by Microsoft and is used in essentially all of their products. It is mainly used for ...

Angular 2, 4, 5, 6, 7, 8 and 9 Interview Questions and Answers -Books

» Are you preparing for Angular Interview? Buy this book (Including Angular 8, 7, 6, 5,4, 2) Interview Q/A Interview Q/A Interview Q/A Interview Q/A Interview Q/A Interview Q/A Interview Q/A » A Complete Guide Book of Angular 9 This is a concise, complete overview of the key aspects of Angular 9. It is fully up to date with the latest release of Angular. This article provide all the important aspects required for angular developers looking for brief and useful content... Posted In Angular 9 » A Complete Guide Book of Angular 8 This is a concise, complete overview of the key aspects of Angular 9. It is fully up to date with the latest release of Angular. This article provide all the important aspects required for angular developers looking for brief and useful content... Posted In Angular 8 » A Complete Guide Book of Angular 7 This is a concise, complete overview of the key aspects of Angular 7. It is fully up to date with the latest release of Angular. This ...