Фото Павла Некоранца на Unsplash
Это продолжение SOLID. В последнем посте я описал Землю, теперь мы продолжим с L. Так что, если вы не проверили последнее сообщение, смело переходите по ссылке: https://dev.to/sightlessdog/revisiting-the-l-in-solid-116m
Принцип разделения интерфейсов был определен Робертом К. Мартином несколько лет назад во время консультирования компании Xerox. Он помог им изменить систему печати, которую было трудно разработать.
Он определяет это как:
Ни один клиент не должен быть вынужден зависеть от методов, которые он не использует.
Другими словами, изменение одного метода в классе не должно влиять на классы, которые от него не зависят. Или мы можем сказать, что большие интерфейсы должны быть разделены на более мелкие.
Пример:
Давайте предположим, что в ресторане работают 10 человек, наш класс работников ресторана будет выглядеть следующим образом.
public interface RestaurantWorker { void washDishes(); void cook(); void serve(); }
Из 10 человек есть один парень, который не умеет готовить (он может только мыть посуду или подавать). Тогда метод cook() на самом деле не имеет к нему отношения.
Но, к сожалению, мы должны реализовать метод cook(), верно?
Чтобы исправить это, нам пришлось бы разделить наш интерфейс на более мелкие
public interface Waiter { void serve(); }
public interface Cook { void cook(); }
public interface DishWasher { void washDishes(); }
public class theGuyNoCook implements DishWasher, Waiter { public void washDishes() { } public void serve() { } }
И теперь мы вольны внедрять только соответствующие методы.
Интернет-провайдер предназначен для предотвращения сильной связи между различными частями системы. И это то, что облегчает изменение, рефакторинг и повторное развертывание кода, который мы пишем.
https://en.wikipedia.org/wiki/Interface_segregation_principle Роберт К. Мартин “Принципы ООД” Мейер Б. (1997): Объектно-ориентированное построение программного обеспечения, 2-е издание https://en.wikipedia.org/wiki/Interface_segregation_principle
Оригинал: “https://dev.to/sightlessdog/revisiting-the-s-in-solid-adg”