Найти тему

Принцип программирования DRY. Зачем ему следовать? Примеры на Java и Python

Оглавление

DRY (Don't Repeat Yourself) — это один из ключевых принципов в программировании, цель которого заключается в том, чтобы избежать дублирования кода. Этот принцип был впервые формализован в книге «The Pragmatic Programmer» (1999) Дэйва Томаса и Энди Ханта.

Основная идея DRY:

Каждая часть знаний системы должна иметь единственное, однозначное и авторитетное представление.

Это означает, что если в коде или логике программы есть повторяющиеся фрагменты, их следует реорганизовать таким образом, чтобы они присутствовали только в одном месте.

Примеры дублирования, которых следует избегать:

1. Дублирование кода:

Проблема: Если один и тот же блок кода используется в нескольких местах, это может привести к проблемам при изменении логики. Если потребуется изменение, его нужно будет вносить в нескольких местах, что увеличивает вероятность ошибок.

Пример проблемы:

Представим, что у нас есть два метода, которые вычисляют налог для разных типов товаров. Логика расчета налога одинаковая, но она дублируется в обоих методах.

Java (без DRY):

Python (без DRY):

-2

Здесь логика расчета налога дублируется в двух местах. Если налог изменится, нам придется изменить код в обоих местах, что увеличивает вероятность ошибок.

Решение (с применением DRY):

Мы можем вынести общую логику расчета налога в отдельный метод или функцию.

Java (с DRY):

-3

Python (с DRY):

-4

Теперь, если налог изменится, нам нужно будет изменить его только в одном месте.

2. Дублирование бизнес-логики:


Проблема: Если бизнес-логика (например, проверка данных или выполнение расчетов) реализована в нескольких местах, то при изменении бизнес-правил нужно будет обновлять код в нескольких местах, что увеличивает вероятность ошибок и несоответствий.

Пример проблемы:

Предположим, у нас есть два метода, которые проверяют возраст пользователя, чтобы определить, может ли он совершить покупку. Логика проверки возраста одинаковая, но она дублируется.

Java (без DRY):

-5

Python (без DRY):

-6

Здесь логика проверки возраста дублируется. Если возрастное ограничение изменится (например, с 18 на 21 год), нужно будет обновлять обе функции.

Решение (с применением DRY):

Вынесем проверку возраста в отдельную функцию.

Java (с DRY):

-7

Python (с DRY):

-8

Теперь при изменении возрастного ограничения нам нужно изменить только одну функцию.

3. Дублирование знаний:

Проблема: Дублирование знаний может касаться документации, комментариев, конфигурационных файлов и других аспектов системы. Например, если конфигурационные данные (например, настройки базы данных или URL-адреса API) дублируются в нескольких местах, это может привести к ошибкам и несоответствиям.

Пример проблемы:

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

Java (без DRY):

-9

Python (без DRY):

-10

Адреса баз данных дублируются в коде, и если конфигурация изменится, её нужно будет обновлять в нескольких местах.

Решение (с применением DRY):

Мы можем хранить конфигурацию в одном месте, например, в конфигурационном файле или в виде констант.

Java (с DRY):

-11

Python (с DRY):

-12

Теперь, если изменится URL базы данных, его нужно будет изменить только в одном месте.

Примечание к последнему примеру - вообще лучшим решением будет хранить константы в конфигурационном файле. В файлах с логикой лучше не хранить.

Примеры применения DRY:

1. Функции и методы:

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

2. Модули и библиотеки:

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

3. Конфигурационные файлы:

Настройки и параметры лучше хранить в одном месте (например, в конфигурационном файле), чем жестко прописывать их в коде.

4. Наследование и композиция:

В объектно-ориентированном программировании использование наследования и композиции помогает избежать дублирования кода путем объединения общих свойств и методов в базовые классы или компоненты.

Преимущества DRY:

  • Упрощение сопровождения: Изменения нужно вносить только в одном месте, что снижает вероятность ошибок.
  • Чистота и читаемость кода: Код становится проще, так как в нем меньше повторений.
  • Ускорение разработки: Повторное использование кода экономит время.
  • Меньше багов: Так как изменения вносятся в одном месте, меньше шансов, что разные части кода будут вести себя по-разному.

Потенциальные проблемы:

Иногда, следуя принципу DRY, можно переусердствовать, что приведет к сложностям.

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

Важно соблюдать баланс между соблюдением DRY и поддерживаемостью кода.

-13

Заключение:

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

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам

Наука
7 млн интересуются