Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет первые разделы рецепта - «Выразительный реакт - рефакторинг» #5295

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

HellSquirrel
Copy link
Member

Это ранний драфт, который будет ооочень долго ползти в направлении продакшена :)
Любые предложения приветствуются

@github-actions github-actions bot added статья Расширенный материал рецепт Контент для Рецептов labels Apr 17, 2024
Copy link

Превью контента из опубликовано.

Copy link
Member

@solarrust solarrust left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Несколько мелких правочек. Жду продолжения =)

@@ -0,0 +1,54 @@
---
title: "Выразительный React: рефакторинг везде"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: "Выразительный React: рефакторинг везде"
title: "Выразительный React: рефакторинг"

Предлагаю чуть убавить игривости в заголовке =)

Comment on lines +16 to +26
## Тяжёлый монолитный компонент
В предыдущей статье мы создали компонент `Maze` для отображения лабиринта. Сейчас внутри этого компонента содержатся:

* утилиты для генерации случайных чисел и стен лабиринта
* типы для работы с лабиринтом
* функция для генерации анимации
* состояние стен лабиринта
* собачка
* логика перемещения собачки
* компонент кнопки «Апорт»

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Тяжёлый монолитный компонент
В предыдущей статье мы создали компонент `Maze` для отображения лабиринта. Сейчас внутри этого компонента содержатся:
* утилиты для генерации случайных чисел и стен лабиринта
* типы для работы с лабиринтом
* функция для генерации анимации
* состояние стен лабиринта
* собачка
* логика перемещения собачки
* компонент кнопки «Апорт»
## Тяжёлый монолитный компонент
В предыдущей статье мы создали компонент `Maze` для отображения лабиринта. Сейчас внутри этого компонента содержатся:
- утилиты для генерации случайных чисел и стен лабиринта;
- типы для работы с лабиринтом;
- функция для генерации анимации;
- состояние стен лабиринта;
- собачка;
- логика перемещения собачки;
- компонент кнопки «Апорт».

* логика перемещения собачки
* компонент кнопки «Апорт»

В своей известной книге, «Рефакторинг», Мартин Фаулер называет подобное «code smell (признак плохого кода)».
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
В своей известной книге, «Рефакторинг», Мартин Фаулер называет подобное «code smell (признак плохого кода)».
В своей известной книге «Рефакторинг» Мартин Фаулер называет подобное «code smell» (признак плохого кода).


В своей известной книге, «Рефакторинг», Мартин Фаулер называет подобное «code smell (признак плохого кода)».

Когда в компоненте находится слишком много логики это _может быть_ (а может и не быть) признаком плохой организации кода. В этом случае с организацией действительно не все в порядке, например потому что компонент собачка слишком сильно связан с компонентом лабиринта. Мы не можем отправлять собачку к другим приключениям, а если нам захочется заменить собачку на котика нам зачем-то придется это делать внутри компонента лабиринта.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Когда в компоненте находится слишком много логики это _может быть_ (а может и не быть) признаком плохой организации кода. В этом случае с организацией действительно не все в порядке, например потому что компонент собачка слишком сильно связан с компонентом лабиринта. Мы не можем отправлять собачку к другим приключениям, а если нам захочется заменить собачку на котика нам зачем-то придется это делать внутри компонента лабиринта.
Когда в компоненте находится слишком много логики это _может быть_ (а может и не быть) признаком плохой организации кода. В этом случае с организацией действительно не всё в порядке. Например, потому что компонент собачка слишком сильно связан с компонентом лабиринта. Мы не можем отправлять собачку к другим приключениям, а если нам захочется заменить собачку на котика нам зачем-то придется это делать внутри компонента лабиринта.

Когда в компоненте находится слишком много логики это _может быть_ (а может и не быть) признаком плохой организации кода. В этом случае с организацией действительно не все в порядке, например потому что компонент собачка слишком сильно связан с компонентом лабиринта. Мы не можем отправлять собачку к другим приключениям, а если нам захочется заменить собачку на котика нам зачем-то придется это делать внутри компонента лабиринта.


## Проектируем решение
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Проектируем решение
## Проектируем решение



## Проектируем решение
Хочется разделить компонент на несколько частей, какими могли бы быть эти части и какие у них могли бы быть обязанности?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Хочется разделить компонент на несколько частей, какими могли бы быть эти части и какие у них могли бы быть обязанности?
Хочется разделить компонент на несколько частей. Какими могли бы быть эти части и какие у них могли бы быть обязанности?

## Проектируем решение
Хочется разделить компонент на несколько частей, какими могли бы быть эти части и какие у них могли бы быть обязанности?

Воспользуемся популярным трюком с разделением компонентов на простые и сложные. Простые компоненты не содержат никакой логики кроме логики своего отображения. Умные компоненты реализуют какие-то части логики и передают простым компонентам данные для отображения.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Воспользуемся популярным трюком с разделением компонентов на простые и сложные. Простые компоненты не содержат никакой логики кроме логики своего отображения. Умные компоненты реализуют какие-то части логики и передают простым компонентам данные для отображения.
Воспользуемся популярным трюком с разделением компонентов на простые и сложные. _Простые компоненты_ не содержат никакой логики кроме логики своего отображения. _Сложные компоненты_ реализуют какие-то части логики и передают простым компонентам данные для отображения.

@solarrust
Copy link
Member

Пинг =)

@loonlylokly
Copy link
Contributor

loonlylokly commented Jul 9, 2024

А для этого раздела уже полностью прописан план? Ну то есть от статьи к статье будет идти какая-то связь или не обязательно? Мне просто кажется тема про паттерны в реакт сюда хорошо подошла бы.
Возможно даже отдельными статьями: compound components, render props и другие. Что-то вроде этого https://www.patterns.dev/react/compound-pattern

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
рецепт Контент для Рецептов статья Расширенный материал
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants