Есть ли другие преимущества для слабосвязанного кода помимо TDD?
Когда я делаю TDD, это заставляет меня использовать принцип внедрения зависимостей, и я получаю слабосвязанный код.
Мне сказали, что сложнее понять приложение со слабосвязанным кодом.
Можете ли вы сказать мне, что плюсы и минусы слабосвязанного кода?
6 ответов
Внедрение зависимостей автоматически не приводит к слабой связи. Я согласен с ответами выше о плюсах слабой связи. Основным преимуществом внедрения зависимостей является то, что он улучшает тестируемость и помогает следовать принципу GoF "Программа-интерфейс", а не "Реализация". Но вы также можете иметь высокую связь с введенными зависимостями.
Самым большим преимуществом является то, что внесение изменений в один модуль не нарушает другие модули непредсказуемым образом.
Другим преимуществом является возможность более легкой замены компонентов, когда у вас более одной реализации.
Представьте, что у вас есть система корзины покупок, она обычно хранит и читает из базы данных, это по умолчанию. Но вы можете сделать так, чтобы он использовал бэкэнд, который не так хорош, но работает, когда у вас нет базы данных.
Поскольку он слабо связан, он очень изменчив. В этом весь смысл. Если вам это не нужно, слабая связь может привести к множеству косвенных указаний, в результате чего система станет более "глубокой": вам нужно посмотреть на уровень вниз, чтобы увидеть все, что происходит.
Как вы сказали, минусы слабосвязанного кода - повышенная сложность, и ее трудно понять. Обычно не сразу видно, что делает код, когда он слабо связан.
Как уже говорили другие: преимущество в том, что гораздо проще менять другие части кода / модули / объекты / компоненты, когда эти части не зависят друг от друга.
Как и в случае с ОО-проектированием, вы должны сделать компромиссы - для вас важнее иметь высокомодульный код, который легко менять и вставлять? Или важнее иметь легко понятный код, который проще? Вам придется решить это.
Повторное использование, расширяемость и уменьшение побочных эффектов.