Ответ
DRY (Don't Repeat Yourself — «Не повторяйся») — это фундаментальный принцип разработки ПО, который гласит: «Каждое знание должно иметь единственное, непротиворечивое и авторитетное представление в системе».
На практике это означает устранение дублирования логики, а не просто текста кода. Два фрагмента кода считаются дублированием, если изменение одного из них по логической необходимости требует изменения другого.
Пример нарушения DRY:
public class OrderProcessor
{
public void Process(Order order)
{
// Дублирующаяся проверка и логирование
if (order.Items.Count == 0)
{
Logger.Log("Заказ пуст. Обработка отменена.");
return;
}
// Логика обработки...
}
public void Cancel(Order order)
{
// Та же самая проверка и логирование снова
if (order.Items.Count == 0)
{
Logger.Log("Заказ пуст. Отмена невозможна.");
return;
}
// Логика отмены...
}
}
Исправленный вариант (следование DRY):
public class OrderValidator
{
// Знание о валидации непустого заказа представлено в одном месте.
public static bool ValidateNotEmpty(Order order, string operationName)
{
if (order.Items.Count == 0)
{
Logger.Log($"Заказ пуст. Операция '{operationName}' отменена.");
return false;
}
return true;
}
}
public class OrderProcessor
{
public void Process(Order order)
{
if (!OrderValidator.ValidateNotEmpty(order, nameof(Process))) return;
// Логика обработки...
}
public void Cancel(Order order)
{
if (!OrderValidator.ValidateNotEmpty(order, nameof(Cancel))) return;
// Логика отмены...
}
}
Преимущества следования DRY:
- Снижение количества ошибок: Исправление или улучшение логики требуется только в одном месте.
- Упрощение поддержки: Код становится легче читать и изменять.
- Повышение согласованности: Поведение системы становится предсказуемым, так как одинаковая логика не разбросана по кодовой базе.
Важное уточнение: Не стоит абсолютизировать DRY на ранних этапах. Преждевременное абстрагирование дублирующегося кода, когда его назначение ещё не до конца ясно, может привести к созданию неправильных, жёстко связанных абстракций. Иногда лучше допустить контролируемое дублирование, чем создать плохую абстракцию.