ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 4 - ISP
Принцип разделения интерфейсов
Данный принцип относится к интерфейсам общего назначения и гласит о том, что функционал лучше разделить на несколько маленьких интерфейсов чтобы дочерние объекты смогли использовать только то, что им действительно нужно.
Основные признаки нарушения принципа разделения интерфейсов:
- Слишком большие интерфейсы;
- Компоненты слабо согласованы (перекликается с принципом единой ответственности);
- Методы остаются нереализованными (перекликается с принципом подстановки Барбары Лисков).
Рассмотрим данный принцип на примере. В этот раз мы не будем опираться на код из прошлых частей и представим что у нас в компании имеются работники с фиксированной и сдельной заработной платой. Интерфейс и реализация выглядят следующим образом:
В данном коде нарушаются принцип разделения интерфейсов, так как функционал его слишком избыточен из-за чего мы попадаем в ситуацию, когда наследникам приходиться реализовывать ненужный им функционал.
Чтобы исправить нынешнюю ситуацию, необходимо разделить интерфейсы на IWorker, IFixWorker, IContractWorker.
Таким образом, классы смогут реализовывать только необходимый функционал и будут выглядеть следующим образом:
Заключение
Таким образом, принцип разделения интерфейсов позволяет создавать код, который не будет заставлять реализующие классы использовать бесполезных для них функционал. Можно заметить, что принципы SOLID очень часто перекликаются между собой и нарушив один из них есть шанс не соблюсти еще несколько. Соблюдение принципа ISP, также позволяет не нарушать принцип единственной ответсвенности и подстановки Барбары Лисков.
Список использованных источников
- Принципы SOLID. Принцип единственной обязанности. URL: https://metanit.com/sharp/patterns/5.1.php
- S.O.L.I.D. Principles of Object-Oriented Programming in C#. URL: https://www.educative.io/blog/solid-principles-oop-c-sharp
- Принципы SOLID в C#. URL: https://professorweb.ru/my/it/blog/net/solid.php
- Опасность нарушения принципов SOLID в C#. URL: https://learn.microsoft.com/ru-ru/archive/msdn-magazine/2014/may/csharp-best-practices-dangers-of-violating-solid-principles-in-csharp