День четыреста седьмой. #Оффтоп #97Вещей
97 Вещей, Которые Должен Знать Каждый Программист
30. Не Повторяйтесь
Из всех принципов программирования “Don’t Repeat Yourself” (DRY), пожалуй, один из самых фундаментальных. Этот принцип был сформулирован Энди Хантом и Дейвом Томасом в книге «Программист-прагматик» и лежит в основе многих других известных практик разработки ПО и паттернов проектирования. Разработчик, который учится распознавать дублирование и понимает, как его устранить с помощью соответствующих практик и создания правильной абстракции, может писать гораздо более чистый код, чем тот, кто постоянно захламляет приложение ненужными повторениями.
Дублирование - это мусор
Каждая строка кода приложения должна поддерживаться и является потенциальным источником будущих ошибок. Дублирование излишне раздувает кодовую базу, в результате чего повышается риск возникновения ошибок и добавления случайной сложности в систему. Это также затрудняет понимание системы разработчиками и вносит неуверенность из-за того, что изменения, сделанные в одном месте, возможно нужно внести в других местах. DRY требует, чтобы «каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы».
Повторение в процессе призывает к автоматизации
Многие процессы в разработке ПО повторяются и легко автоматизируются. Принцип DRY применяется и в этих случаях. Ручное тестирование является медленным, подверженным ошибкам и трудным для повторения, поэтому следует по возможности использовать наборы автоматизированных тестов. То же касается интеграции ПО: процесс сборки следует запускать как можно чаще, в идеале при каждом внесении изменений. Все болезненные ручные процессы, которые можно автоматизировать, должны быть автоматизированы и стандартизованы. Цель состоит в том, чтобы гарантировать, что есть только один способ выполнить задачу, и он настолько беспроблемный, насколько это возможно.
Повторение в логике призывает к абстракции
Повторение в логике может принимать разные формы. Копирование и вставка логики if-then или switch-case является одной из самых простых для обнаружения и исправления. Многие шаблоны проектирования имеют явную цель - уменьшить или устранить дублирование в логике. Если объект требует, чтобы произошло несколько вещей, прежде чем его можно будет использовать, это можно сделать с помощью абстрактной фабрики или фабричного метода. Если объект имеет несколько вариантов поведения, они могут быть внедрены с помощью Стратегии. Появление самих паттернов проектирования - это попытка уменьшить дублирование при решении стандартных проблем. Кроме того, DRY может применяться к структуре данных, например, в базах данных – это процесс нормализации.
Дело принципа
Другие программные принципы также связаны с DRY. Принцип «Один и только один раз», который применяется к функциональному поведению кода, может рассматриваться как подмножество DRY. Принцип «Открыт/Закрыт», который гласит, что «программные объекты должны быть открыты для расширения, но закрыты для модификации», работает на практике только тогда, когда соблюдается DRY. Аналогично, известный принцип единственной обязанности, который требует, чтобы у класса была «только одна причина для изменения», основан на DRY.
Принцип DRY обеспечивает фундаментальное руководство для разработчиков ПО и помогает создавать более простые, удобные в обслуживании и качественные приложения. Хотя существуют сценарии, в которых повторение может быть необходимо, например, для удовлетворения требований производительности, его следует использовать только в тех случаях, когда дело непосредственно касается реальной проблемы.
Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/
Автор оригинала – Steve Smith
Post #489
1.48K