В прошлом посте я рассказывала о принципе единственной ответственности (S в SOLID). Сегодня разбираем следующую букву — O (Open/Closed Principle), принцип открытости/закрытости.
Что такое Open/Closed Principle?
Принцип открытости/закрытости гласит: программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации. Это означает, что вы должны иметь возможность добавлять новую функциональность без изменения существующего кода.
Почему это важно?
Чем больше кода мы изменяем, тем больше багов мы создаем. Каждое изменение существующего кода несет риск появления ошибок и требует повторного тестирования всех зависимых компонентов. Следование OCP минимизирует эти риски, позволяя расширять функциональность без модификации уже работающего кода.
Пример
❌Нарушение OCP
class DiscountCalculator {
double calculate(double price, String customerType) {
if (customerType == 'regular') {
return price * 0.95;
} else if (customerType == 'premium') {
return price * 0.90;
} else if (customerType == 'vip') {
return price * 0.80;
}
return price;
}
}Метод нужно менять при добавлении новых правил.
✅Правильное применение OCP
abstract class DiscountStrategy {
double apply(double price);
}
class RegularDiscount implements DiscountStrategy {
@override
double apply(double price) => price * 0.95;
}
class PremiumDiscount implements DiscountStrategy {
@override
double apply(double price) => price * 0.90;
}
class VipDiscount implements DiscountStrategy {
@override
double apply(double price) => price * 0.80;
}
class DiscountCalculator {
double calculate(double price, DiscountStrategy strategy) {
return strategy.apply(price);
}
}Открыты для расширения, закрыты для модификации
Преимущества OCP
✔️Меньше ошибок при внесении изменений
✔️Не требуется регрессионное тестирование существующего кода
✔️Более простой процесс расширения функциональности
✔️Повышение стабильности и надежности системы
Принцип открытости/закрытости — это основа стабильной и расширяемой архитектуры. Помните главное правило: чем больше кода мы изменяем, тем больше багов мы создаем.
В следующем посте я расскажу о принципе подстановки Барбары Лисков (L в SOLID).
✅Подписывайтесь, чтобы не пропустить
