TGViewer
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL @aqa_engineer · 1.52K subscribers
Post #412 732
#solid
O – Open/Closed Principle (OCP)

Код должен быть открыт для расширения, но закрыт для модификации.

Рассмотрим пример из предыдущего поста, где KafkaProducerManager принимает продюсер в конструкторе. Это один из примеров OCP в действии.

🔍 Как это работает?

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

Старая реализация (без OCP) потребовала бы изменений в KafkaProducerManager что добавляет риск сломать существующую логику.

Новая реализация (с OCP) 
позволяет расширить функционал без модификации основного класса.

Реализация:

1. Определяем базовый интерфейс
:
from abc import ABC, abstractmethod

class BaseProducer(ABC):
    @abstractmethod
    def send(self, message: type[BaseModel]) -> None:
        pass


2. Реализуем конкретный продюсер:

class LoggedProducer(BaseProducer):
def __init__(self, producer: KafkaProducer):
self.producer = producer

def send(self, message: str) -> None:
        print(f"Отправка сообщения: {message}")
        return self.producer.send(message)



3. Модифицируем менеджер
:

Изменяем аннотацию указывая, что теперь принимаем любой совместимый продюсер
class KafkaProducerManager:
def __init__(self, producer: BaseProducer)
self.producer = producer

def send_message(self, message: type[BaseModel]):
msg = message.model_dump_json()
return self.producer.send(msg)


4. 💻 Пример использования:
# Базовый продюсер
producer = KafkaProducer()

# Расширенный функционал (логирование)
logged_producer = LoggedProducer(producer)

# Менеджер работает с любым продюсером
producer_manager = KafkaProducerManager(logged_producer)

message = Message(body='some value', key='some_key')
producer_manager.send(message) # Логируется и отправляется сообщение


Преимущества:
1. Безопасность - Не трогаем рабочий код
2. Гибкость 
- Легко добавляем новые фичи
3. Масштабируемость 
- Можно создать ValidatedProducer, AuthProducer и т.д.


👉 Главное: Мы расширили функционал, не изменяя существующий, код закрыт для модификации.
Именно в этом суть OCP.

——————————-

📱 TG-сообщество

📱 Обучение

📱 Отзывы
  • 👍 3
More from @aqa_engineer
  1. Sep 2, 2026💙💙💙💙💙 Маленькое напоминание о большой дате: где стоит провести День программиста⬆️ Ар…
  2. Sep 2, 2026Привет, давно меня не было пригар по работе, что совсем не успеваю ничего. За что прошу пр…
  3. Jul 16, 2026👩‍💻 В мае-июне я проходила курс «Автоматизация тестирования Rest API Advanced (Python)»…
  4. Jun 10, 2026Привет! Уже на следующей неделе у меня стартуют. Автоматизация тестирования брокеров сообщ…
  5. Jun 8, 2026Несколько месяцев назад я спросил, какой технический тренинг вам был бы действительно инте…
  6. Jun 6, 2026Материалы для тех, кто в теме. Одна из самых больших проблем при развитии в IT - это возмо…
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 →