Русский
Открыть в Telegram

Пост DRY – источник плохих абстракций

30 июля 2024
З
Заметки про React
Ссылка
нажмите — покажем
DRY – источник плохих абстракций В блоге Свижец Теллер вышла статья про принцип DRY. Самый худший и сложный для сопровождения код, который я видел или писал, был написан в погоне за DRY - Don't Repeat Yourself. Это один из первых принципов проектирования, который изучают разработчики и используют повсеместно. ⭐️ Бездумное использование принципа DRY приводит к созданию плохих абстракций в коде. Из-за чего код становится запутанным и сложно поддерживаемым. Например, нужно показать навигационное меню: // 1 const NavigationMenu = () => { return ( <ul> <li> <a href="/about"> <img src="question-icon.png" /> About </a> </li> <li> <a href="/contact"> <img src="person-icon.png" /> Contact </a> </li> <li> <a href="/buy"> <img src="cash-icon.png" /> Buy </a> </li> // ... </ul> ) } Если пойти в сторону принципа DRY, то можно написать функцию-фабрику создания пункта меню и использовать массив: // 2 const NavigationMenu = () => { const items = [ makeNavItem("/about", "question-icon.png", "About"), makeNavItem("/contact", "person-icon.png", "Contact"), makeNavItem("/buy", "cash-icon.png", "Buy"), // ... ] return ( <ul> {items.map((item) => ( <li> <a href={item.url}> <img src={item.icon} /> {label} </a> </li> ))} </ul> ) } Теперь добавление и удаление элементов меню стало проще, однако читать код стало тяжелее, т.к. приходится прыгать по строкам кода. Представьте, что поступила задача – подсветить кнопку Buy красным цветом. Однако в текущем виде абстракция оптимизирована на отображение всех кнопок в одинаковом стиле. Можно попытаться добавить новые параметры в функцию-фабрику или попробовать переписать всю абстракцию. Но это усложнит код и будет проще вернуться к первому варианту кода. https://swizec.com/blog/dry-the-common-source-of-bad-abstractions/
43 · 3.2K ·

Рядом в ленте

ЗЗаметки про Reactreact-html В React появился отдельный модуль react-html, из которого можно импортировать функцию рендера HTML renderToMarkup. Это преемник функции renderToStatiЗЗаметки про ReactПолучение данных с помощью Server Actions в Next.js В своем блоге Робин Вирух показал опыт использования Server Actions для получения данных в Next.js. В докуме
это сообщение
ЗЗаметки про ReactФича флаги в Next.js Для Next.js появилась библиотека @vercel/flags/next для работы с фича-флагами в коде. Пример объявления: import { unstable_flag as flag } fЗЗаметки про ReactГибкая предварительная загрузка данных в SPA При создании большого SPA одним из важных пунктов оптимизации становится предварительная загрузка данных. Например,
ЗЗаметки про ReactЗаметки про React@ru_react_notes · канал · Технологии
3 412подписчиков491постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем