Часть 2: Понимание принципа открытия-закрытия (OCP)

Привет! Из предыдущей статьи мы уже знаем о SOLID и принципе единой ответственности (SRP), а сегодня поговорим о втором — принципе Open-Closed. Этот принцип — причудливое название простой идеи: когда вы добавляете в свой код новую функциональность, не изменяйте существующий код. Вместо этого создайте новый код, расширяющий существующий код.

Итак, как это применимо к Angular?

Давайте рассмотрим тот же пример приложения, которое отображает список продуктов.

Предположим, мы хотим добавить новую функцию, позволяющую пользователям сортировать товары по категориям.

💡 Совет для профессионалов: максимально эффективно используйте компоненты Angular с помощью таких инструментов, как Bit. С Bit вы можете собрать их из своей кодовой базы и поделиться ими в Bit Cloud. Затем вы можете повторно использовать эти компоненты во всех своих проектах.

Также читайте:



Сценарий 1: Неиспользование принципа Open-Closed

В этом сценарии мы можем изменить существующий ProductComponent, чтобы добавить функциональность сортировки. Это означает, что нам нужно будет изменить существующий код и добавить в компонент новые свойства и методы. Этот подход нарушает принцип Open-Closed, потому что мы меняем существующий код, а не расширяем его.

Вот как может выглядеть код:

В этом коде мы добавили два новых свойства (sortBy и sortAscending) и новый метод sortProducts() в файл ProductComponent.

У этого подхода есть несколько недостатков:

  • У ProductComponent теперь слишком много обязанностей — отображение товаров и сортировка по категориям. Это нарушает принцип единственной ответственности.
  • Если мы хотим добавить больше типов сортировки в будущем, нам придется продолжать модифицировать ProductComponent, что нарушает принцип Open-Closed.
  • Если у нас есть другие компоненты, которые отображают продукты, нам также придется дублировать код сортировки в этих компонентах.

Сценарий 2: Использование принципа открытого-закрытого

В этом сценарии мы можем создать новый компонент с именем ProductSorterComponent, который будет обрабатывать функции сортировки. Этот компонент расширит поведение существующего ProductComponent, не изменяя его.

Вот как может выглядеть код:

В этом коде мы создали новый компонент с именем ProductSorterComponent, который обрабатывает функции сортировки. ProductComponent теперь отображает только продукты и не обрабатывает логику сортировки. Мы передали данные products, sortBy, sortAscending из ProductComponent в ProductSorterComponent с помощью декоратора @Input().

Этот подход имеет несколько преимуществ:

  • Каждый компонент ProductComponent и ProductSorterComponent несет единую ответственность в соответствии с принципом единой ответственности. ProductComponent отображает продукты, а ProductSorterComponent сортирует продукты по параметру.
  • Если мы хотим изменить параметр сортировки, мы можем передать его компонентам ProductSorterComponent, не изменяя ProductComponent. Это следует принципу открытого-закрытого.
  • Мы можем повторно использовать ProductSorterComponent в других компонентах, которые отображают продукты. Это позволяет избежать дублирования кода сортировки в нескольких компонентах.
  • ProductComponent и ProductSorterComponent можно разрабатывать и тестировать независимо друг от друга. Это улучшает ремонтопригодность кодовой базы.

Таким образом, принцип Open-Closed является важным принципом разработки программного обеспечения, который поощряет расширяемость кода и удобство сопровождения. В Angular мы можем применить этот принцип, создавая новые компоненты, которые расширяют поведение существующих компонентов, не изменяя их. Этот подход помогает нам писать более чистый, более модульный и повторно используемый код.

Спасибо за прочтение, если вам понравилась эта статья, вы можете 👏 или написать комментарий.
Смотрите также другие статьи о принципах дизайна:



Создавайте приложения Angular с повторно используемыми компонентами, как Lego.

Инструмент с открытым исходным кодом Bit помогает более чем 250 000 разработчиков создавать приложения с компонентами.

Превратите любой пользовательский интерфейс, функцию или страницу в компонент многократного использования — и поделитесь им со своими приложениями. Легче сотрудничать и строить быстрее.



Подробнее

Разделите приложения на компоненты, чтобы упростить разработку приложений, и наслаждайтесь наилучшими возможностями для рабочих процессов, которые вы хотите:

Микро-интерфейсы

Система дизайна

Совместное использование кода и повторное использование

Монорепо

Узнать больше: