Принцип разделения интерфейсов
ТВЕРДЫЙ |
---|
Принципы |
В области разработки программного обеспечения принцип разделения интерфейсов ( ISP ) гласит, что ни один код не должен зависеть от методов, которые он не использует. [1] Интернет-провайдер разбивает очень большие интерфейсы на более мелкие и более конкретные, так что клиентам нужно будет знать только о тех методах, которые их интересуют. Такие сжатые интерфейсы также называются ролевыми интерфейсами . [2] ISP предназначен для того, чтобы обеспечить развязку системы и, таким образом, упростить рефакторинг, изменение и повторное развертывание. ISP — это один из пяти принципов объектно-ориентированного проектирования SOLID , аналогичный принципу высокой сплоченности GRASP . [3] Помимо объектно-ориентированного проектирования, ISP также является ключевым принципом проектирования распределенных систем в целом и одним из шести принципов IDEALS для проектирования микросервисов . [4]
Важность в объектно-ориентированном проектировании
[ редактировать ]В рамках объектно-ориентированного проектирования интерфейсы предоставляют уровни абстракции, которые упрощают код и создают барьер, предотвращающий связь с зависимостями . Система может стать настолько связанной на нескольких уровнях, что уже невозможно внести изменения в одном месте без необходимости внесения множества дополнительных изменений. [1] Использование интерфейса или абстрактного класса может предотвратить этот побочный эффект.
Источник
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
ISP был впервые использован и сформулирован Робертом К. Мартином. [5] консультируя Xerox . Xerox создала новую систему печати, которая могла выполнять различные задачи, такие как сшивание скобками и отправка факсов. Программное обеспечение для этой системы было создано с нуля. По мере роста программного обеспечения вносить изменения становилось все труднее, так что даже самое незначительное изменение требовало часового цикла повторного развертывания, что делало разработку практически невозможной.
Проблема проектирования заключалась в том, что почти все задачи использовали один класс Job. Всякий раз, когда необходимо было выполнить задание на печать или сшивание, выполнялся вызов класса Job. В результате получился «толстый» класс с множеством методов, специфичных для самых разных клиентов. Из-за такой конструкции задание на сшивание будет знать обо всех методах задания на печать, даже если от них не будет никакой пользы.
Решение, предложенное Мартином, использовало то, что сегодня называется принципом разделения интерфейса. Применительно к программному обеспечению Xerox был добавлен уровень интерфейса между классом Job и его клиентами с использованием принципа инверсии зависимостей . Вместо одного большого класса Job был создан интерфейс Staple Job или интерфейс Print Job, который будет использоваться классами Staple или Print соответственно, вызывая методы класса Job. Поэтому для каждого типа задания был создан один интерфейс, который был реализован классом Job.
Типичное нарушение
[ редактировать ]Типичное нарушение принципа разделения интерфейса описано в книге «Гибкая разработка программного обеспечения: принципы, шаблоны и практики». [1] в «Примере транзакции в банкомате» и в статье, также написанной Робертом К. Мартином специально об интернет-провайдере. [6] В этом примере обсуждается пользовательский интерфейс банкомата, который обрабатывает все запросы, такие как запрос на депозит или запрос на снятие средств, а также то, как этот интерфейс необходимо разделить на отдельные и более конкретные интерфейсы.
См. также
[ редактировать ]- SOLID – буква «I» в слове SOLID означает принцип разделения интерфейса.
Ссылки
[ редактировать ]- ^ Jump up to: а б с Мартин, Роберт (2002). Гибкая разработка программного обеспечения: принципы, шаблоны и практики. Пирсон Образование.
- ^ Ролевой интерфейс
- ^ «Дэвид Хейден, Принцип разделения интерфейсов (ISP) — принципы объектно-ориентированного проектирования классов » . Архивировано из оригинала 20 августа 2010 г. Проверено 7 ноября 2009 г.
- ^ Пауло Мерсон, Принципы проектирования микросервисов: думайте ИДЕАЛЫ, а не ТВЕРДОСТЬ , выпуск InfoQ eMag № 91, февраль 2021 г.
- ^ «Этот принцип был впервые определен Робертом К. Мартином» .
- ^ Роберт К. Мартин, Принцип разделения интерфейса , отчет C++, июнь 1996 г.
Внешние ссылки
[ редактировать ]- Принципы ООД — Описание и ссылки на подробные статьи о SOLID.