Что такое сильная и слабая связность (high/low coupling) в архитектуре ПО

Ответ

Связность (coupling) — это мера зависимости между программными модулями. Цель хорошей архитектуры — достичь слабой связности.

Сильная связность (High Coupling)

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

Последствия:

  • Хрупкость: Код легко сломать при внесении правок.
  • Сложность тестирования: Трудно изолировать и тестировать модули по отдельности.
  • Низкая переиспользуемость: Модуль нельзя использовать в другом месте без его зависимостей.

Пример (до рефакторинга):

class OrderProcessor:
    def process(self, order_data):
        # Прямое создание экземпляра конкретного класса
        # OrderProcessor "знает" о существовании MySQLDatabase
        db = MySQLDatabase()
        db.connect()
        db.save(order_data)

Слабая связность (Low Coupling)

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

Достигается через:

  • Инверсию зависимостей (Dependency Injection)
  • Событийно-ориентированную архитектуру
  • Абстрактные классы и интерфейсы

Пример (после рефакторинга с DI):

# OrderProcessor зависит от абстракции, а не от конкретной реализации
class OrderProcessor:
    def __init__(self, database_connector):
        self.db = database_connector

    def process(self, order_data):
        self.db.connect()
        self.db.save(order_data)

# Конкретную реализацию можно легко подменить
# processor_mysql = OrderProcessor(MySQLDatabase())
# processor_postgres = OrderProcessor(PostgreSQLDatabase())

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