Мы используем cookies
все статьи

SOLID, YAGNI, DRY, KISS принципы в React

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

По мере развития программирования код становится более сложным и, соответственно, возникает все больше ошибок и трудностей в понимании. Для борьбы с этим создаются различные практики и принципы разработки. Одними из таких являются SOLID принципы.

Эти принципы, конечно, больше подходят для ООП, т.к. они зависят от классов и интерфейсов. А вот современный код в React в данный момент далек от ООП, а скорее больше функциональный. Но SOLID принципы не зависят от языка, и их можно интерпретировать как угодно и, соответственно, применить к функциональному коду React.

SOLID является аббревиатурой, а каждая буква - это один из пяти принципов: 

  1. SRP - принцип единой ответственности. Изначальное определение гласит, что каждый класс должен иметь только одну ответственность. Этот принцип проще всего применить к функциональному коду, переведя это определение так: компонент/функция/модуль должны делать только одну вещь. Этот принцип является самым эффективным для улучшения кода. К тому же ему проще всего следовать из всех пяти принципов. Касаемо React, мы этот принцип можем реализовать следующими способами:

  • разделить большие компоненты с громоздкой логикой на более мелкие.

  • вынести в отдельные функции общего назначения.

  • вынести логику, связанную с компонентой, в пользовательские хуки.

2. OCP - принцип открытости-закрытости. Изначальное определение гласит, что программные объекты должны быть открыты для расширения, но закрыты для модификации. Собственно, это определение даже в этом виде подходит для React. Приводя пример, можно сказать, что есть компоненты, которые в зависимости от различных условий показывают разный контент. Соответственно, со временем эта компонента может расширяться, и условий будет становиться все больше. Таким образом, можно реализовать этот принцип, используя render-props или children.

3. LSP - принцип подстановки Барбары Лисков. Этот принцип указывает на то, что объекты подтипа должны замещаться объектами супертипа. Т.е. дочерний класс должен уметь делать все то, что и родительский. Но получается так, что это, как правило, следует применять в наследовании классов. А в современном React наследование практически не используется из-за использования функционального подхода.

4. ISP - принцип разделения интерфейсов. Основная идея заключается в том, что клиенты не должны зависеть от интерфейсов, которые они не используют. При использовании React можно перефразировать в “компоненты не должны зависеть от пропсов, которые они не используют”. Не раз можно заметить при написании кода, что, к примеру, в одну небольшую компоненту через пропсы прокидывается большой объект. Но используется в дальнейшем только пара свойств из него. Собственно, эта компонента знает слишком много информации, которую не использует. Это может стать проблемой при использовании TypeScript в случаях, когда эта компонента может принимать в себя объекты с разной структурой.

5. DIP - принцип инверсии зависимостей. Он говорит о том, что следует полагаться на абстракции, а не на конкреции. Если применить этот принцип к React, то один компонент не должен зависеть от другого. И должна быть общая абстракция, от которой будут зависеть оба компонента.

Помимо принципов SOLID, существуют еще много принципов разработки. Одними из которых являются DRY, KISS, YAGNI.

KISS - этот принцип переводится как “оставь код простым и тупым”. Из перевода сразу понятно, что не нужно усложнять свой код. При разрастании каких-то функций и компонент старайтесь разделять их на более мелкие и понятные логические части.

DRY - означает “не повторяйтесь”. Во время написания кода старайтесь избегать дублирования кода и выносить его в отдельные компоненты и функции. Последствием избегания этого принципа может стать наличие множества дублированного кода, которые в дальнейшем сложно будет изменять. Ведь проще добавлять какие-то изменения только в одном месте, а не в нескольких сразу.

YAGNI - этот принцип переводится как “это вам не понадобится”. Суть этого метода в том, что не стоит писать функционал, который, возможно, будет использоваться в будущем. Он может и не понадобится, а время на написание кода будет потрачено. К тому же написанный лишний функционал может измениться, да и вовсе не понадобиться.

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

Denis P.
Denis P.
October 12, 2022#tech
другие статьи
Part 2. How do navigation apps take the shortest route?

Продолжая тему прошлой статьи, мы поговорим об Алгоритме ...

читать
читать
Part 1. How do navigation apps plot the shortest path?

Кто-нибудь задумывался, каким образом современные навигац...

читать
читать
Light and dark theme with CSS variables

Сегодня современное веб-приложение (и не только веб), кот...

читать
читать
Fear of public speaking. How to overcome?

Страх публичных выступлений — это вторая по популярности ...

читать
читать