Семь признаков хорошего Vue.js кодинга:
1) ESlint и авто-форматирование
2) Следование Vue style guide
3) Осмысленное наименование переменных, функций, компонент; семантические тэги в шаблоне и CSS классы
4) За редким исключением размер компонента со стилями и шаблоном не превышает 200 строк
5) Отсутствие дублирования кода
6) Комментирование с JSDoc
7) Простой, легко-читабельный код
#bestpractices #styleguide #architecture
1) ESlint и авто-форматирование
2) Следование Vue style guide
3) Осмысленное наименование переменных, функций, компонент; семантические тэги в шаблоне и CSS классы
4) За редким исключением размер компонента со стилями и шаблоном не превышает 200 строк
5) Отсутствие дублирования кода
6) Комментирование с JSDoc
7) Простой, легко-читабельный код
#bestpractices #styleguide #architecture
Аргументация против
1. Это явно - ты всегда видишь, откуда взялся компонент и в один клик можешь провалиться в него, а не в
2. Это наглядно видно не только в редакторе, но и на всяких гитхабах, когда смотришь там код, с автоимпортами тебе придется гадать, откуда взялся компонент
3. Если проект вырастает во что-то большее, чем маленький пет, то количество компонентов уже не даст нормально и лампово работать с автоимпортами, если их названия будут собираться на основе папочек, где они лежат, а в больших проектах это вообще самоубийство
4. Не нужно генерировать портянку
5. Ты уверен, что тришейкинг работает правильно и ты явно контролируешь загрузку каждого конкретного компонента в каком-либо месте, а не полагаешься на то, что за тебя это каким-то магическим образом сделает автоимпорт
6. Импорты может проставлять сама
#architecture #bestpractices #tip #nuxt
глобальных автоимпортов
(типа тех, что в Nuxt
) от Artyom Tuchkov1. Это явно - ты всегда видишь, откуда взялся компонент и в один клик можешь провалиться в него, а не в
*.d.ts
;)2. Это наглядно видно не только в редакторе, но и на всяких гитхабах, когда смотришь там код, с автоимпортами тебе придется гадать, откуда взялся компонент
3. Если проект вырастает во что-то большее, чем маленький пет, то количество компонентов уже не даст нормально и лампово работать с автоимпортами, если их названия будут собираться на основе папочек, где они лежат, а в больших проектах это вообще самоубийство
4. Не нужно генерировать портянку
*.d.ts
для того, чтобы редакторы видели их, и, как следствие, без них ты получаешь более качественный тулинг и анализ твоего кода5. Ты уверен, что тришейкинг работает правильно и ты явно контролируешь загрузку каждого конкретного компонента в каком-либо месте, а не полагаешься на то, что за тебя это каким-то магическим образом сделает автоимпорт
6. Импорты может проставлять сама
IDE
, а еще их можно сворачивать в 1 строку, если визуально отвлекают#architecture #bestpractices #tip #nuxt
Чтобы выделить из компонента отдельно некий функционал с реактивным состоянием, были созданы
Чтобы использовать функционал с реактивным состоянием между несколькими компонентами, можно задействовать js модули либо
Иногда нужно нечто среднее - подобную сущность с реактивным стейтом и функционалом на нем, но используемую в нескольких связанных компонентах (например, в
В этом случае данный реактивный объект будет жить в своем ограниченном контексте и не будет конфликтовать с оставшейся частью проекта.
#reactivity #bestpractices #architecture
composable
функции (называемые "функциями", хотя по сути это объект созданный через js замыкание - closure).Чтобы использовать функционал с реактивным состоянием между несколькими компонентами, можно задействовать js модули либо
Pinia
/Vuex
сторы.Иногда нужно нечто среднее - подобную сущность с реактивным стейтом и функционалом на нем, но используемую в нескольких связанных компонентах (например, в
Tabs
или каких-то виджетах), - то есть, в некотором локальном контексте. Для этого можно в общем родительском компоненте создать composable
, который передать потомкам - либо через provide/inject
(лучше), либо через props
(не надо).В этом случае данный реактивный объект будет жить в своем ограниченном контексте и не будет конфликтовать с оставшейся частью проекта.
#reactivity #bestpractices #architecture
Telegram
Vue-FAQ
Во Vue 3 есть важная и нередко используемая конструкция, у которой нет имени. Это то, что обычно называют "композабл с глобальными рефами".
Но:
1. Это не композабл по определению
2. Там не обязательно рефы
3. Они не "глобальны"
В общем случае структура…
Но:
1. Это не композабл по определению
2. Там не обязательно рефы
3. Они не "глобальны"
В общем случае структура…
Полезные советы по написанию "чистого кода"
1. Используйте осмысленные имена
2. Следуйте принципу единственной ответственности (SRP)
3. Избегайте излишних комментариев
4. Делайте код читабельным
5. Пишите юнит-тесты
6. Будьте аккуратны с зависимостями
7. Организуйте структуру своего проекта
8. Используйте единый стиль форматирования
9. Избегайте хардкода значений
10. Ограничивайте размер функций
Согласен со всеми пунктами, кроме пятого.
#tip #bestpractices
1. Используйте осмысленные имена
2. Следуйте принципу единственной ответственности (SRP)
3. Избегайте излишних комментариев
4. Делайте код читабельным
5. Пишите юнит-тесты
6. Будьте аккуратны с зависимостями
7. Организуйте структуру своего проекта
8. Используйте единый стиль форматирования
9. Избегайте хардкода значений
10. Ограничивайте размер функций
Согласен со всеми пунктами, кроме пятого.
#tip #bestpractices
Хабр
Как писать чистый код — советы для разработчиков с примерами
Представьте комнату, где повсюду разбросана одежда, книги и другие вещи. Найти что-то в такой комнате было бы сложно, не так ли? Теперь представьте, что вы пишете беспорядочный код – это не менее...
10 советов для написания чистого кода на Vue.js
1. Разумное использование
2. Следуйте соглашениям об именовании в
3. Избегайте чрезмерного использования
Пример: Используйте ref или reactive для временных состояний.
4. Эффективное использование слотов. Используйте именованные слоты для большей гибкости в многократно используемых компонентах и документируйте их использование.
Пример: Создайте компонент Card с <slot name="header"></slot> для настраиваемых заголовков.
5. Использование
Пример: Применяйте стили, специфичные для компонента, без влияния на другие части приложения.
6. Написание многократно используемых компонентов. Разделяйте элементы интерфейса на многократно используемые, специфичные компоненты, избегая чрезмерно обобщенных конструкций.
Пример: Вместо жесткого кодирования кнопки, создайте настраиваемый компонент Button, поддерживающий пропсы для различных стилей.
7. Обработка асинхронного кода. Используйте
8. Документирование пропсов и событий. Ясно определяйте и документируйте пропсы и события, используя аннотации
Пример: Используйте defineProps и defineEmits в Vue 3 для ясности и безопасности типов.
9. Линтинг кода. Настройте
10. Упрощение шаблонов. Избегайте сложной логики в шаблонах; вместо этого используйте вычисляемые свойства или методы.
Пример: Замените `v-if="list.filter(item => item.active).length > 0"` на вычисляемое свойство `activeItems`.
(с) dev.to
#tip #bestpractices
1. Разумное использование
Composition API
. Разделяйте большой код на небольшие, многократно используемые компоненты для поддержания модульности и читаемости.2. Следуйте соглашениям об именовании в
Vue
. Используйте PascalCase
для имен файлов компонентов и, при необходимости, kebab-case
для использования в шаблонах.3. Избегайте чрезмерного использования
Vuex
или Pinia
. Держите временные состояния интерфейса (например, видимость модальных окон) локальными для компонента, а не в глобальном управлении состоянием.Пример: Используйте ref или reactive для временных состояний.
4. Эффективное использование слотов. Используйте именованные слоты для большей гибкости в многократно используемых компонентах и документируйте их использование.
Пример: Создайте компонент Card с <slot name="header"></slot> для настраиваемых заголовков.
5. Использование
Scoped Styles
. Используйте scoped стили в <style scoped> для предотвращения конфликтов CSS
.Пример: Применяйте стили, специфичные для компонента, без влияния на другие части приложения.
6. Написание многократно используемых компонентов. Разделяйте элементы интерфейса на многократно используемые, специфичные компоненты, избегая чрезмерно обобщенных конструкций.
Пример: Вместо жесткого кодирования кнопки, создайте настраиваемый компонент Button, поддерживающий пропсы для различных стилей.
7. Обработка асинхронного кода. Используйте
async/await
для API
-запросов и обрабатывайте ошибки с помощью центральной функции.8. Документирование пропсов и событий. Ясно определяйте и документируйте пропсы и события, используя аннотации
props
и emit
или TypeScript
.Пример: Используйте defineProps и defineEmits в Vue 3 для ясности и безопасности типов.
9. Линтинг кода. Настройте
ESLint
и Prettier
с Vue
-специфическими конфигурациями для обеспечения качества и согласованности кода.10. Упрощение шаблонов. Избегайте сложной логики в шаблонах; вместо этого используйте вычисляемые свойства или методы.
Пример: Замените `v-if="list.filter(item => item.active).length > 0"` на вычисляемое свойство `activeItems`.
(с) dev.to
#tip #bestpractices
Кто занимается микрофронтендами - познавательная статья Micro Frontends на сайте Мартина Фаулера
#microfrontends #architecture #bestpractices
#microfrontends #architecture #bestpractices
martinfowler.com
Micro Frontends
How to split up your large, complex, frontend codebases into simple, composable, independently deliverable apps.
Основные принципы локально-ориентированной (Local-First) разработки
Локально-ориентированная разработка имеет сходства с подходами offline-first, но идет дальше, уделяя больше внимания контролю пользователя и владению данными. Вот ключевые принципы, определяющие настоящую локально-ориентированную веб-приложение:
- Мгновенный доступ: Пользователи могут немедленно получить доступ к своей работе без ожидания загрузки или синхронизации данных (отсутствие спиннеров).
- Независимость от устройства: Данные доступны на разных устройствах без проблем.
- Независимость от сети: Основные задачи могут выполняться без подключения к интернету.
- Легкость совместной работы: Приложение поддерживает легкое совместную работу, даже в автономных сценариях.
- Долговечные (Future-Proof) данные: Данные пользователей остаются доступными и пригодными для использования с течением времени, независимо от изменений в программном обеспечении.
- Встроенная безопасность: Безопасность и конфиденциальность являются фундаментальными аспектами дизайна.
- Пользовательский контроль: Пользователи полностью владеют и контролируют свои данные.
#bestpractices #architecture
Локально-ориентированная разработка имеет сходства с подходами offline-first, но идет дальше, уделяя больше внимания контролю пользователя и владению данными. Вот ключевые принципы, определяющие настоящую локально-ориентированную веб-приложение:
- Мгновенный доступ: Пользователи могут немедленно получить доступ к своей работе без ожидания загрузки или синхронизации данных (отсутствие спиннеров).
- Независимость от устройства: Данные доступны на разных устройствах без проблем.
- Независимость от сети: Основные задачи могут выполняться без подключения к интернету.
- Легкость совместной работы: Приложение поддерживает легкое совместную работу, даже в автономных сценариях.
- Долговечные (Future-Proof) данные: Данные пользователей остаются доступными и пригодными для использования с течением времени, независимо от изменений в программном обеспечении.
- Встроенная безопасность: Безопасность и конфиденциальность являются фундаментальными аспектами дизайна.
- Пользовательский контроль: Пользователи полностью владеют и контролируют свои данные.
#bestpractices #architecture