Challenges Review

Challenges Review

Diana Kucherenko

Отзыв о ToDo app Challenge


✅ Задача: ToDo App Challenge.

✅ Решение: ToDo app ( App "Todo List" on React classes components with saving data to localStorage ) by DmitryHniezdilov.

✅ Feedback by expert Andrey Kucherenko:


1) Functionality & Usability

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

2) Code

  • Код является читаемым, имена методов и компонент понятны и логичны. В качестве улучшений стоит сделать рефакторинг и уменьшить размер больших файлов(например `src/components/app/App.js` - 253 строки), при рефакторинге стоит учитывать принцип единственной ответственности( single responsibility[1]).
  • Для постоянного контроля качества кода и следования стилям рекомендовано использовать линтеры, например eslint.

3) Development tools

  • По коду можно увидеть, что проект создан при помощи create-react-app и содержит нужные инструменты для ведения разработки. В тоже время в репозитории добавлены `yarn.lock` и `package-lock.json`, что говорит о использовании разных инструментов для выполнения одних и тех же задач.

4) React

С точки зрения React приложения есть несколько моментов, на которые стоит обратить внимание:

  • Использование стилей, в текущей реализации есть вероятность переопределения стилей, например если будут два компонента с одинаковыми классами, для того чтобы избежать подобного поведения можно использовать makeStyles[2], styled components[3] или css modules[4].
  • Компоненты выполнены в разных стилях: функциональные и классовые компоненты, для улучшения качества кода лучше придерживаться одного стиля.
  • Отсутсвует проверка типов данных при помощи `PropTypes`[10].

Использование React Hooks.

  • Во многих местах приложения используются callbacks в JSX, это приводит к лишним перерендеривания в процессе работы приложения [5], для того, чтобы избежать такого поведения, стоит использовать `useCallback` hook.
  • Для работы со state используется `useState` [6].
  • Для работы с localStorage стоит использовать `useEffect` [7].

5) Tests

В приложении нет тестов, для работы с тестами рекомендую ознакомится с фреймворком `jest` для тестирования и библиотекой `testing-library`. 

6) Other

  • Не рекомендуется хранить собранную версию в git репозитории (папка `build`).
  • Для работы с git стоит использовать соглашение о коммитах, чтобы повысить читаемость истории изменений в проекте [8].
  • Для ведения разработки в условиях реального проекта необходима непрерывная интеграция и автоматизация выгрузки [9]
  • Документация, хорошей практикой является написание шагов для развертывания проекта в readme файле проекта. 

 

Functionality: 

🟢🟢🟢🟢⚪️

Usability: 

🟢🟢🟢🟢⚪️

Code quality: 

🟢🟢🟢⚪️⚪️

Maintainability: 

🟢🟢🟢🟢⚪️ 

Documentation: 

🟢⚪️⚪️⚪️⚪️

Development tools:

🟢🟢⚪️⚪️⚪️

CI/CD: 

⚪️⚪️⚪️⚪️⚪️

Deployment:

⚪️⚪️⚪️⚪️⚪️

Tests: 

⚪️⚪️⚪️⚪️⚪️


Links:

[1] SOLID (объектно-ориентированное программирование)

[2] Material-UI 

[3] Visual primitives for the component age

[4] Практическое руководство по использованию CSS Modules в React приложениях

[5] Работа с callbacks в React

[6] Использование хука состояния

[7] About React Hook (lessons video)

[8]Соглашение о коммитах

[9] GitHub Actions

[10] Проверка типов с помощью PropTypes




Report Page