Что такое принцип низкой связанности и высокой связности и почему высокая связанность плоха
Что проверяют
Прежде всего различаете ли вы два похожих слова. Связанность это про зависимости между модулями, связность про то, насколько содержимое одного модуля работает на одну задачу. Цель формулируется парой: связанность низкая, связность высокая. В Android это не теория, а причина, по которой экран на две тысячи строк невозможно ни поменять, ни протестировать.
Как отвечать
Низкая связанность значит, что модуль знает о соседе минимум: интерфейс, а не реализацию; тип события, а не то, кто на него подпишется. Высокая связность значит, что всё внутри модуля относится к одной ответственности и меняется вместе.
Почему высокая связанность плоха: правка расходится волной по зависимым модулям; изолированный тест невозможен, потому что вместо подстановки заглушки приходится поднимать половину приложения; конкретную реализацию нельзя заменить; сборка замедляется, так как модуль Gradle пересобирается вслед за чужими изменениями.
Что снижает связанность на практике: зависимость от интерфейса репозитория, а не от класса сетевого клиента; передача данных через Flow вместо прямых вызовов чужих методов; навигация через абстракцию, а не через знание класса конкретного экрана; разделение проекта на модули Gradle с явным публичным API.
Признак низкой связности рядом: Activity, которая одновременно разбирает ответ сервера, форматирует дату и решает, куда переходить дальше.
Где спотыкаются
Путают термины местами и хвалят высокую связанность. Звучит это как незнание темы, даже если человек имел в виду правильное.
Снижают связанность глобальными объектами. Синглтон вместо явной зависимости прячет связь от компилятора, но не убирает её: тест по-прежнему тащит за собой всё дерево, а порядок инициализации становится неявным.
Дробят проект на модули по слоям и получают ту же связанность. Если data, domain и ui знают друг о друге весь набор классов фичи, физическое разделение папок не изменило ничего.