Не повторяйся
« Не повторяйте себя » ( DRY ) — это принцип разработки программного обеспечения, направленный на уменьшение повторения информации , которая может измениться, замену ее абстракциями , которые с меньшей вероятностью изменятся, или использование нормализации данных , которая в первую очередь позволяет избежать избыточности. .
Принцип DRY сформулирован следующим образом: «Каждая часть знаний должна иметь единственное, однозначное и авторитетное представление в системе». Принцип был сформулирован Энди Хантом и Дэйвом Томасом в их книге «Программист-прагматик» . [1] Они применяют его довольно широко, включая схемы баз данных , планы тестирования , систему сборки и даже документацию . [2] При успешном применении принципа DRY модификация любого отдельного элемента системы не требует изменения других логически несвязанных элементов. Кроме того, все логически связанные элементы изменяются предсказуемо и равномерно и, таким образом, синхронизируются . Помимо использования методов и подпрограмм в своем коде, Томас и Хант полагаются на генераторы кода , системы автоматической сборки и языки сценариев для соблюдения принципа DRY на всех уровнях.
Принцип единого выбора
[ редактировать ]Частным случаем DRY является принцип единственного выбора . Это было определено Бертраном Мейером как:«Всякий раз, когда программная система должна поддерживать набор альтернатив, один и только один модуль в системе должен знать их исчерпывающий список». [3] Он был применен при проектировании Эйфеля .
Альтернативы
[ редактировать ]ВЛАЖНЫЙ
[ редактировать ]Противоположная DRY точка зрения называется WET, обратным названием, которое обычно означает « писать все дважды». [4] (альтернативно пишите каждый раз , нам нравится печатать или тратить время зря ). Решения WET распространены в многоуровневых архитектурах, где перед разработчиком может быть поставлена задача, например, добавить поле комментария в форму в веб-приложении. Текстовая строка «комментарий» может повторяться в метке, теге HTML, в имени функции чтения, частной переменной, DDL базы данных, запросах и т. д. Подход DRY устраняет эту избыточность за счет использования структур, которые сокращают или устраняют все задачи редактирования, кроме самых важных, оставляя возможность расширения добавления новых переменных знаний в одном месте. [5] Эта концепция «WET» как альтернативы «DRY» программированию существует в мире Java как минимум с 2002 года, хотя неизвестно, кто придумал этот термин. [6]
ЧТО?
[ редактировать ]Другой подход к абстракциям — принцип AHA. AHA означает избегать поспешных абстракций , описанных Кентом К. Доддсом как оптимизация в первую очередь для изменений и избежание преждевременной оптимизации. [7] и находился под влиянием Сэнди Мец , которая «предпочитала дублирование неправильной абстракции». [8]
AHA основан на понимании того, что чем глубже инженеры-инвеститоры абстрагируют часть программного обеспечения, тем больше они осознают, что стоимость этих инвестиций никогда не может быть возмещена ( ошибка невозвратных затрат ). Таким образом, инженеры склонны продолжать повторять одну и ту же абстракцию каждый раз, когда требования меняются. Программирование AHA предполагает, что решения WET и DRY неизбежно создают жесткое и сложное в сопровождении программное обеспечение. Вместо того, чтобы начинать с абстракции или абстрагировать при определенном количестве дублирований, программное обеспечение может быть более гибким и надежным, если абстракция выполняется тогда, когда это необходимо, или когда дублирование само по себе становится барьером и известно, как абстракция требуется. функционировать.
Программирование AHA первоначально было названо «влажным кодом» Доддсом, позже Дэниелом Бартоломе, [9] и первоначально названный как DAMP ( Не абстрагируйте методы преждевременно ). Мэттом Райером [10] Уже существовал другой принцип программирования, названный DAMP ( Описательные и значимые фразы ) и описанный Джеем Филдсом. [11] и сообщество выступило против использования слова «ВЛАЖНЫЙ» из-за культурной неприязни к слову « влажный» . [12] Доддс призвал к поиску альтернатив в Твиттере и предложил DATE в качестве альтернативы, прежде чем остановиться на Шер Скарлетт об AHA. предложении [7] [13] [14]
См. также
[ редактировать ]- Принцип абстракции (программирование)
- Дублирование кода
- Повторное использование кода
- Копирование и вставка программ
- Нормализация и денормализация базы данных
- Зеркальное отображение дисков
- Развертывание цикла
- Резервирование (инжиниринг)
- Правило трех (компьютерное программирование)
- Разделение интересов
- Единый источник достоверной информации (SSOT/SPOT)
- Структурированное программирование
- Два или более, используйте for
- Тебе это не понадобится (ЯГНИ)
Ссылки
[ редактировать ]- ^ Хант, Эндрю; Томас, Дэвид (1999). Программист-прагматик: от подмастерья к мастеру (1-е изд.). США: Аддисон-Уэсли. стр. 320 . ISBN 978-0201616224 .
- ^ Дэйв Томас, интервью с Биллом Веннерсом (10 октября 2003 г.). «Ортогональность и принцип DRY» . Проверено 1 декабря 2006 г.
- ^ Объектно-ориентированное создание программного обеспечения, 2-е издание, стр. 63
- ^ Пай, Прасид; Ксавье, Шайн (31 января 2017 г.). Шаблоны проектирования .NET . Packt Publishing Ltd. ISBN 978-1-78646-186-5 .
- ^ Джастин Ли (8 марта 2006 г.). «СУХОЙ – для неудачников» . Проверено 31 августа 2013 г.
- ^ Зиг Зихтерман (8 августа 2002 г.). «JavaOne 2002: Заметки Зига» . Проверено 9 января 2024 г.
- ^ Перейти обратно: а б Кент К. Доддс (01 апреля 2019 г.). «Программирование AHA» . Проверено 8 мая 2021 г.
- ^ Сэнди Мец (20 января 2016 г.). «Неправильная абстракция» . Проверено 8 мая 2021 г.
- ^ Варфоломе, Даниэль (21 августа 2020 г.). «Влажный код. Почему код не должен быть полностью СУХИМ» . Технический директор стартапа . Проверено 11 ноября 2021 г.
- ^ Хаус, Эв (24 декабря 2020 г.). «Использование кода DRY, WET & DAMP» . Середина . Проверено 11 ноября 2021 г.
- ^ Филдс, Джей. «Код DRY, DAMP DSL» . Мысли Джея Филдса . Проверено 11 ноября 2021 г.
- ^ Резник, Брайан (28 апреля 2016 г.). «Почему так много людей не любят слово «влажный»? У этого ученого есть теория» . Вокс Медиа . Проверено 11 ноября 2021 г.
- ^ Доддс, Кент (27 марта 2021 г.). «3 минуты с Кентом: сначала напиши код, а потом создавай абстракцию» . Трусики . Проверено 11 ноября 2021 г.
- ^ Доддс, Кент; Бостиан, Эмма; Ниси, Ник (30 июля 2021 г.). «JS Party – Эпизод № 186: Подсесть на React» . Журнал изменений . Проверено 11 ноября 2021 г.
Внешние ссылки
[ редактировать ]- Не повторяйтесь на WikiWikiWeb
- Один и только один раз в WikiWikiWeb
- 97 вещей, которые должен знать каждый программист (О'Рейли)
- Миф о чрезмерной нормализации (обсуждение академических крайностей и реальных сценариев использования баз данных)
- Уилсон Дж., Арулия Д.А., Браун К.Т., Чу Хонг Н.П., Дэвис М., Гай Р.Т. и др. (2014). «Лучшие практики научных вычислений» . ПЛОС Биол . 12 (1): e1001745. arXiv : 1210.0530 . дои : 10.1371/journal.pbio.1001745 . ПМЦ 3886731 . ПМИД 24415924 .
Не повторяйте себя (или других)