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)
[9] GitHub Actions
[10] Проверка типов с помощью PropTypes