Рубрики
Без рубрики

Когда сухой не работает, промойте

Я видел эту ошибку много раз, и я сделал ее сам. Когда вы впервые читаете о сухой программе … Tagged с JavaScript, WebDev, Python, Codenewbie.

Я видел эту ошибку много раз, и я сделал ее сам. Когда вы впервые читаете о концепции сухого программирования, вы, вероятно, неправильно поняли ее.

То, что происходит в вашей голове, было следующим:

Википедия: сухой подставка для того, чтобы не повторять один и тот же код дважды. Вы: Хм, хорошо, я заменю все свои дублиции абстракцией.

И это кажется хорошим решением, но это не так. Ваша абстракция часто неверна.

Вот почему:

  1. Вы видите дублирование.
  2. Вы извлекаете дублирование в новую абстракцию (метод, класс).
  3. Вы заменяете дублирование новой абстракцией.
  4. Вы думаете, что ваш код идеален.
  5. Время проходит.
  6. У менеджера продукта есть новые требования. Ваша абстракция почти идеальна для них.
  7. Вы начинаете реализовать новые требования.
  8. И вот маленькая Но: ваша абстракция почти идеальна. Почему? Новые требования затрагивают только 95% старого кода, который вы извлекли в абстракцию. Остальные 5% не затронуты. И вместо того, чтобы создать новую абстракцию с 95% копированным кодом из текущего, вы решили изменить код вашей абстракции. Вы добавляете условное утверждение, if..else Например, и передайте параметр, чтобы ваша абстракция могла выполнять разные действия для разных решений.
  9. Теперь ваша абстракция ведет себя по -разному в разных случаях.
  10. Приходит еще одно новое требование. Другой дополнительный параметр. Еще один новый условный. (Цикл, пока код не станет очень трудным для понимания и поддержания.)
  11. Поздравляю, вы создали неправильную абстракцию.

Код больше не представляет единую общую абстракцию. Это становится насыщенной условием процедуры. Трудно понять и легко сломать. Добавление новых функций невероятно сложно, и каждая новая функция усложняет код еще больше.

Это бесконечная петля.

Так что делать?

Напишите все дважды.

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

Вы должны помнить: дублирование намного дешевле, чем неправильная абстракция.

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

“Эй, эй!” Новый дизайн страницы поступил от менеджера продукта. Вы смотрите на это и находите новую, причудливую кнопку внизу страницы.

Это похоже на старые кнопки, но у него есть «одна маленькая вещь». Чтобы реализовать его, вам нужно переписать 10% вашего Кнопка компонент и добавьте условные операторы и новые параметры.

Теперь у вас есть дилемма:

  1. Изменение Кнопка Анкет Перепишите 10% кода абстракции (добавьте логические условия для поддержки новой логики причудливой кнопки).
  2. Создайте две абстракции: Fancybutton и Кнопка Анкет Скопируйте 90% кода из Кнопка к Fancybutton Анкет

Я знаю, что вы хотите выбрать первый вариант. Вы думаете, что можете справиться с этим. Вы не собираетесь создавать неправильную абстракцию.

Но печальная правда в том, что вы будете (за исключением случаев, когда вы опытный программист и знаете, что делаете).

Скопируйте этот код. Не бойтесь.

Через некоторое время вы узнаете, как будут выглядеть ваши кнопки в будущем. Затем вы можете проанализировать текущую кодовую базу, найти дублированный код в компонентах кнопки и переместить их в хорошую абстракцию.

Если вы обнаружите, что уже слишком поздно справляться с неправильной абстракцией, самый быстрый способ двигаться вперед – вернуться.

Сделайте следующее:

  1. Переместите абстрактный код обратно.
  2. Удалить неиспользованный параметр, который передается абстракции, чтобы выполнить разные действия для разных решений.
  3. Удалить неиспользованную логику.

Это удаляет абстракцию и условные операторы для каждого вызывающего абонента.

Если вы обнаружите, что проходите параметры и добавляете условные операторы через общий код, ваша абстракция неверна.

Предпочитаю дублирование из -за неправильной абстракции.

🔴 Если вам нравится эта статья, поделитесь ею с друзьями и Подпишись на меня в Твиттере

🔴 Получите больше советов по кодированию, советы по собеседованию и последних технических новостей 👉 Присоединяйтесь к моей бюллетене

Оригинал: “https://dev.to/nickbulljs/when-dry-doesn-t-work-go-wet-4536”