TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #489 1.48K
День четыреста седьмой. #Оффтоп #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
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →